1

我只使用 PCRE 管理它,但我希望它也可以与 Javascript 的 RegExp 一起使用。那,正则表达式很丑陋。还有其他更明智的方法来实现这一点吗?

请注意,虽然主题是“OneTwoThree”,但为了简洁起见,我使用“qwe”。

$ cat test.txt | grep -oP '\b(q(\g<we>|\g<w>)|(?<we>(?<w>w)e))\b'
qwe
qw
we

文件 test.txt 包含:

qwe qw we q w e qq qe wq ww eq ew ee qqq qqw qqe qwq qww qeq qew qee wqq wqw wqe wwq www wwe weq wew wee eqq eqw eqe ewq eww ewe eeq eew eee

(只有前三个应该匹配。)

4

2 回答 2

4

像这样的东西适用于您的示例数据:

/\b(qwe?|we)\b/
/\b(q?we|qw)\b/

你可以在这里测试。

但是对于您在标题中指定的完整模式,它将是

/\b(OneTwo(Three)?|TwoThree)\b/
/\b((One)?TwoThree|OneTwo)\b/

现在,这不是更具可读性,但它确实稍微减少了冗余:

/\b(?!w\b)q?we?\b/

你可以在这里测试

或为您的完整模式:

/\b(?!Two\b)(One)?Two(Three)?\b/
于 2013-09-17T15:03:50.323 回答
0

也许这个但不确定 -

 # \b(?=..)q?we?\b

 \b 
 (?= . . )
 q? w e? 
 \b 
于 2013-09-17T18:15:25.123 回答