0

如何在一个正则表达式命令中组合所有模式?有办法吗?

示例:如果我的变量是“a”并且如果我需要检查“a”是否有多个模式,如何在单个命令中执行此操作?我尝试了类似的东西

    set a abc
    regexp ".abc | abc. | .abc." $a

This returned 1 as output. But it should be zero as all my patterns has a "." and not matching with $a

4

3 回答 3

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”不匹配上述任何模式,原因如下:

  1. 它不包含所有 3 个条件所需的任何空格字符(在正确的位置)。
  2. “a”之前没有字符来匹配模式 1 和 2,“c”之后没有字符来匹配模式 2 和 3

你可能想要的是这样的:

regexp ".abc|abc.|.abc." $a

但上面仍然不匹配“abc”。它将匹配“abcd”,因为“c”之后有一个额外的字符。要匹配“abc”,您还需要:

regexp ".abc|abc.|.abc.|abc" $a

但我怀疑这是一个小问题。您问题的核心是您没有意识到正则表达式还将空格解释为要搜索的内容。

于 2012-12-06T07:21:16.457 回答
0

我可以推荐 OpenBSD 的re_format(7)手册页,以获得非常紧凑和正确的 POSIX 正则表达式参考。

于 2012-12-06T05:39:00.703 回答
0

如果我为每个搜索模式使用括号,它就可以工作

    regexp "(.abc)|(abc.)|(.abc.)" $a
于 2012-12-05T18:39:57.697 回答