我使用以下正则表达式:
(?=([0-9]+\s+ok\s+[0-9]+\s+nok)) (?=(ltelidt|eiflmrj5))
我的表达式应该找到以下模式:
1.(条件1):数字后跟ok
,然后数字后跟nok
。例如:13 ok 1 nok
1.(条件2):它应该找到ltelidt
或eiflmrj5
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
3条答案
按热度按时间2izufjch1#
你用错了“看客”相反,您可以摆脱它们,只捕获两个组之间的文本:
在regex 101上看到它匹配。
看起来更好地解释lookaheads会很有用。你可以把它们看作是从字符串中的给定位置Assert一个正则表达式。因此,让我们定义字符串
abc
中的位置:可以看到字符串中有4个位置。现在,尝试应用lookahead
(?=b)
。没有匹配继续
找到了,我们从当前位置匹配,得到
b
。现在,我们从这个位置开始计算原始正则表达式的其余部分。piok6c0g2#
如果你真的想使用正向前看
?=
,那么你应该使用下面的正则表达式:考虑这个正则表达式
q(?=u)
,它匹配一个q
,后面跟着一个u
,而不使u
成为匹配的一部分。正先行结构是一对圆括号,左括号后面跟着一个问号和一个等号。您的正则表达式不起作用,因为您的
condition2
不是紧接在condition1
之后。在condition1
和condition2
之间存在其他字符。这就是为什么必须使用.*
但是,我建议您避免在您的情况下向前看,因为它不是必需的。
http://www.regular-expressions.info/lookaround.html
g2ieeal73#
(?=([0-9]+\s+ok\s+[0-9]+\s+nok))
和(?=(ltelidt|eiflmrj5))
不可能同时匹配。也许你会想要这个:也就是说,在
condition1
和condition2
之间可以有任何东西。