regex - Bash 正则表达式匹配点和字符

标签 regex bash shell

我正在尝试使用 =~ 运算符针对 curl 响应字符串执行正则表达式模式。

我目前使用的模式是:

name\":\"(\.[a-zA-Z]+)\"

但目前此模式仅提取仅包含字符 a-z 和 A-Z 的值。我需要这种模式来获取包含“。”的值。字符和一个“@”字符。我该怎么做?

另外,有什么方法可以提高这种模式的性能吗?对字符串执行需要相当长的时间。

干杯。

最佳答案

我最近在我的脚本中遇到了这个问题,该脚本根据我的 git 状态设置了我的 bash 提示符,发现这是因为我想在表达式中匹配的其他东西(即连字符)的位置。

例如,我想匹配 git status 输出的某个部分,例如它说 “你的分支比‘origin/mybranch’领先 1 次提交”的部分。

这是我原来的模式:

"Your branch is (ahead of|behind) '([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)' by ([0-9]+) commit". 

有一天我创建了一个包含 . 的分支,发现我的 bash 提示没有向我显示正确的内容,并将表达式修改为以下内容:

"Your branch is (ahead of|behind) '([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-.]+)' by ([0-9]+) commit". 

我希望它能正常工作,但根本没有匹配项。

看了很多帖子,才知道是连字符(-)的位置问题;我必须把它放在第一个方括号之后,否则它会被解释为一个范围(在这种情况下,它试图解释 _-. 的范围,这是无效的或只是不知何故让整个表情都垮了。

当我将表达式更改为以下内容时它开始工作:

"Your branch is (ahead of|behind) '([a-zA-Z0-9_-]+)/([-a-zA-Z0-9_.]+)' by ([0-9]+) commit". 

所以基本上我的意思是说它可能是您表达式中的其他东西(比如我的连字符)干扰了点和符号的匹配。

关于regex - Bash 正则表达式匹配点和字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15226720/

相关文章:

php - 从字符串中删除数字前缀 - PHP 正则表达式

bash - 如何使用 setenv 在 bash 中设置环境变量?

linux - 删除除特定目录之外的所有目录

linux - 检测 '/proc' 文件系统的正确方法?

java - 程序排除除 1,2,3 之外的数字

regex - Coldfusion - 简单的 HTML 解析

regex - 如何使用捕获的组来转换这些行?

bash - 我的bash脚本中的服务器列表有什么问题?

linux - 如何在Shell脚本中多次检查if条件?

php - preg_match_all() 如何处理字符串?