Regex 正则表达式匹配除word之外的所有内容
所有关于匹配某些内容的QA,除了我发现的单词具有负前瞻性意味着行开始/结束(Regex 正则表达式匹配除word之外的所有内容,regex,perl,pcre,regex-lookarounds,regex-negation,Regex,Perl,Pcre,Regex Lookarounds,Regex Negation,所有关于匹配某些内容的QA,除了我发现的单词具有负前瞻性意味着行开始/结束(^$)。但我不知道如何匹配所有的东西(任何字符如 *>代码>),除了在处理文本中间的其他单词之前的单词。< /P> 我应该在内部匹配ABC: 但是这种方式不允许匹配*,除了在ABC之前。我如何实现这一点 有用链接: ,.因为您使用的是Perl/PCRE,所以最快的方法是: /(?s)(?:(*跳过)(*失败)|]*?ABC.*/ 扩大 (?s) <tag> (?: </tag&g
^
$
)。但我不知道如何匹配所有的东西(任何字符如<代码> *>代码>),除了在处理文本中间的其他单词之前的单词。< /P>
我应该在
内部匹配ABC
:
但是这种方式不允许匹配*
,除了
在ABC
之前。我如何实现这一点
有用链接:
,.因为您使用的是Perl/PCRE,所以最快的方法是:
/(?s)(?:(*跳过)(*失败)|]*?ABC.*/
扩大
(?s)
<tag>
(?:
</tag>
(*SKIP) (*FAIL)
|
.
)*?
ABC
.*?
</tag>
(?s)
(?:
(*跳过)(*失败)
|
.
)*?
基础知识
.*?
基准测试与断言方法的比较
Regex1:(?s)(?:(*SKIP)(*FAIL)|.*?ABC.*?
完成的迭代:50/50(x 1000)
每次迭代找到的匹配项:1
运行时间:0.25秒、254.91毫秒、254905微秒
每秒比赛次数:196151
正则表达式2:(?s)(?:(!)*?ABC.*?
完成的迭代:50/50(x 1000)
每次迭代找到的匹配项:1
运行时间:0.33秒、329.10毫秒、329095微秒
每秒匹配数:151931
正则表达式不擅长两件事:平衡语法和嵌套否定。作为补充说明,在您选择的语言中使用XML解析器要好得多。@grinzСlearly。但毕竟具体描述的问题看起来很简单。regex无法以任何方式解决这个问题?这个问题被标记为perl
,因此我们可以假设需要一个perl解决方案吗?如果是这样,这类棘手的正则表达式问题就是为什么大家都同意应该使用XML解析器解析XML。例如,请参见“但毕竟具体描述的问题看起来很简单。”——正确。外表可能是骗人的,在这个问题解决后,还会有另一个问题,因为你正在重新发明一个相当复杂的轮子。@z0lupka如果有一个功能充分的正则表达式引擎,这几乎总是可能的。但所需的复杂性几乎永远不值得。如果指定正在使用的正则表达式引擎,这可能很重要(请特别注意,PCRE不是Perl)。
...<tag>a a.__a&*</tag>ABC<tag>ffff</tag>...
<tag>(?!<\/tag>)ABC.*?<\/tag>
(?s)
<tag>
(?:
</tag>
(*SKIP) (*FAIL)
|
.
)*?
ABC
.*?
</tag>
Regex1: (?s)<tag>(?:</tag>(*SKIP)(*FAIL)|.)*?ABC.*?</tag>
Completed iterations: 50 / 50 ( x 1000 )
Matches found per iteration: 1
Elapsed Time: 0.25 s, 254.91 ms, 254905 µs
Matches per sec: 196,151
Regex2: (?s)<tag>(?:(?!</tag>).)*?ABC.*?</tag>
Completed iterations: 50 / 50 ( x 1000 )
Matches found per iteration: 1
Elapsed Time: 0.33 s, 329.10 ms, 329095 µs
Matches per sec: 151,931