我使用以下正则表达式:
ok
我的表达式应该找到以下模式:
nok
,然后是数字,后跟13 ok 1 nok
。例如:ltelidt
eiflmrj5
或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
。但是,我的正则表达式未能在以下句子中找到任何模式:
{{1}}
答案 0 :(得分:2)
您未正确使用前瞻。相反,你可以摆脱它们,只是捕获你们两组之间的文本:
([0-9]+\s+ok\s+[0-9]+\s+nok).*?(ltelidt|eiflmrj5)
在regex 101上查看匹配。
看起来对前瞻的更好解释会很有用。您可以将它们视为从字符串中的给定位置断言正则表达式。所以,让我们定义字符串abc
中的位置:
|a|b|c|
1 2 3 4
您可以看到字符串中有4个位置。现在,尝试应用前瞻(?=b)
。
|a|b|c|
^
Current position
不配,继续。
|a|b|c|
^
Current position
知道了,我们只是从当前位置匹配,我们得到b
。现在,我们从这个位置开始评估原始正则表达式的其余部分。
答案 1 :(得分:1)
(?=([0-9]+\s+ok\s+[0-9]+\s+nok))
和(?=(ltelidt|eiflmrj5))
不可能同时匹配。
也许你可能想要这个:
([0-9]+\s+ok\s+[0-9]+\s+nok).*(ltelidt|eiflmrj5)
这就是说,condition1
和condition2
之间可能存在任何问题。在以下部分中有一个表达方式。
答案 2 :(得分:1)
如果你真的想使用正向前瞻?=
,那么你应该使用以下正则表达式:
(?=([0-9]+\s+ok\s+[0-9]+\s+nok)).* (?=(ltelidt|eiflmrj5))
考虑这个正则表达式,q(?=u)
它匹配q
后面跟u
,但没有匹配u
部分。积极的先行构造是一对括号,左括号后跟一个问号和一个等号。
您的正则表达式无法正常工作,因为condition2
之后condition1
没有立即生效。 condition1
和condition2
之间还有其他字符。这就是你必须使用.*
但是,我建议你不要在你的情况下向前看,因为它不是必需的。