regex 正则表达式:条件不起作用

js4nwp54  于 2023-05-08  发布在  其他
关注(0)|答案(3)|浏览(146)

我使用以下正则表达式:

(?=([0-9]+\s+ok\s+[0-9]+\s+nok)) (?=(ltelidt|eiflmrj5))

我的表达式应该找到以下模式:
1.(条件1):数字后跟ok,然后数字后跟nok。例如:13 ok 1 nok
1.(条件2):它应该找到ltelidteiflmrj5
1.最后的表达式应该是这样的:condition1 and condition2
然而,我的正则表达式在下面的句子中找不到任何模式:

605sd25                  schklog_1FS     13 ok  1 nok        106m  24_R23F   eiflmrj5  d1us41  fd1d     tm1500  o1t2enb1010                  2m    2016-02-18 23:30:34  2016-02-19 07:14:01
2izufjch

2izufjch1#

你用错了“看客”相反,您可以摆脱它们,只捕获两个组之间的文本:

([0-9]+\s+ok\s+[0-9]+\s+nok).*?(ltelidt|eiflmrj5)

regex 101上看到它匹配。
看起来更好地解释lookaheads会很有用。你可以把它们看作是从字符串中的给定位置Assert一个正则表达式。因此,让我们定义字符串abc中的位置:

|a|b|c|
1 2 3 4

可以看到字符串中有4个位置。现在,尝试应用lookahead (?=b)

|a|b|c|
^
Current position

没有匹配继续

|a|b|c|
  ^
  Current position

找到了,我们从当前位置匹配,得到b。现在,我们从这个位置开始计算原始正则表达式的其余部分。

piok6c0g

piok6c0g2#

如果你真的想使用正向前看?=,那么你应该使用下面的正则表达式:

(?=([0-9]+\s+ok\s+[0-9]+\s+nok)).* (?=(ltelidt|eiflmrj5))

考虑这个正则表达式q(?=u),它匹配一个q,后面跟着一个u,而不使u成为匹配的一部分。正先行结构是一对圆括号,左括号后面跟着一个问号和一个等号。
您的正则表达式不起作用,因为您的condition2不是紧接在condition1之后。在condition1condition2之间存在其他字符。这就是为什么必须使用.*
但是,我建议您避免在您的情况下向前看,因为它不是必需的。
http://www.regular-expressions.info/lookaround.html

g2ieeal7

g2ieeal73#

(?=([0-9]+\s+ok\s+[0-9]+\s+nok))(?=(ltelidt|eiflmrj5))不可能同时匹配。也许你会想要这个:

([0-9]+\s+ok\s+[0-9]+\s+nok).*(ltelidt|eiflmrj5)

也就是说,在condition1condition2之间可以有任何东西。

相关问题