如何在一个regexp命令中组合所有模式?有办法吗?
示例:如果我的变量是“a”,并且我需要检查“a”是否有多于1个模式,如何在单个命令中执行此操作? 我试过像
这样的东西 set a abc
regexp ".abc | abc. | .abc." $a
这返回1作为输出。但它应该为零,因为我的所有模式都有“。”而且与$ a
不匹配答案 0 :(得分:2)
您失败了,因为空格字符表示正则表达式中的空格字符。所以你的正则表达式:
regexp ".abc | abc. | .abc." $a
正在寻找:
"anything" followed by "a" then "b" then "c" then " "
OR
" " followed by "a" then "b" then "c" then "anything" then " "
OR
" " followed by "anything" then "a" then "b" then "c" then "anything"
显然字符串“abc”与上述模式都不匹配,原因如下:
你可能想要的是这样的:
regexp ".abc|abc.|.abc." $a
但上面仍然与“abc”不匹配。它会匹配“abcd”,因为在“c”之后有一个额外的字符。要匹配“abc”,你需要:
regexp ".abc|abc.|.abc.|abc" $a
但我怀疑这是一个小问题。您的问题的核心是您没有意识到正则表达式也将空格解释为要搜索的内容。
答案 1 :(得分:0)
如果我对每个搜索模式使用括号
,它都有效 regexp "(.abc)|(abc.)|(.abc.)" $a
答案 2 :(得分:0)
我可以推荐OpenBSD的re_format(7)手册页,以获得非常紧凑和正确的POSIX正则表达式参考。