我正在使用这样的模式:
RegEx_Seek.MatchPattern := '(*UCP)(?m)(?<=can he )(not ){0,2}\w\w+(?= )';
我想捕捉答案一词。但是我没有得到结果。不被捕获对我不介意。问题是未捕获答案。
从help page:
选项设置:
(?U)默认不贪婪(懒惰)(?x)扩展
(忽略空格)(?-...)未设置的选项
所以我尝试了
(*CP)(?-U)(?m)
,但是没有编译该模式。示例文字:
他们将他扶在肩上,背负他,将他安置在他的位置,他站了起来。他不能离开他的地方。是的,有人向他哭泣,但他不能回答,也不能救他脱离麻烦。
但是我正在使用更复杂的模式来搜索动词:
RegEx_Seek_1.MatchPattern := '(*UCP)(?m)(?<=can he )(also |alone |myself |otherwise |who |not ){0,2}{0,2}\w\w+(?= )';
因此,从根本上讲,我不想更改模式的结构,而只是要禁用用于“非”字的贪婪选项。
最佳答案
您可以使用
(*UCP)\bcan\s+he\s+(?:not\s+){0,2}\K\w{2,}
请参见regex demo
细节
(*UCP)
-PCRE动词,使所有速记都支持Unicode\bcan
-整个单词can
(\b
是单词边界)\s+
-1+空格he
-he
词\s+
-1+空格(?:not\s+){0,2}
-0、1或2次出现的not
,然后是1+个空格\K
-匹配重置运算符\w{2,}
-2个或更多单词字符。
关于regex - 如何在TDIPerlRegEx正则表达式中设置不友好选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52475190/