gpt4 book ai didi

regex - 在Regex中,为什么 “((.|\s)*?)”与 “\s*.*”不同

转载 作者:行者123 更新时间:2023-12-04 13:29:02 28 4
gpt4 key购买 nike

并不是一个完整的新手,但是我仍然对正则表达式一无所知。我试图使用Regex去除

标签,这是我的第一次尝试

<p\s*.*>

太贪心了
<p someAttributes='example'>SomeText</p>

我知道了
((.|\s)*?)

似乎应该同样贪婪,有人可以帮助我理解为什么它不是吗?

试图使这个问题尽可能地非特定于语言,但是我用ColdFusion的reReplaceNoCase做到了,如果有很大的不同。

最佳答案

关键区别在于*?部分,该部分创建了勉强量词,因此它尝试尽可能少地匹配。标准量词*贪婪量词,并尝试尽可能匹配。

参见例如Greedy vs. Reluctant vs. Possessive Quantifiers

正如Seth Robertson指出的那样,您可能想使用不依赖于贪婪/勉强行为的正则表达式。实际上,您可以编写一个所有格正则表达式以获得最佳性能:

<p\s*+[^>]*+>

此处, \s*+匹配任意数量的空格,而 [^>]*+匹配任意数量的字符( >除外)。这两个量词在不匹配的情况下都不会回溯,这会在不匹配的情况下提高运行时间,对于某些正则表达式实现,在匹配的情况下也可以(因为可以省略内部回溯数据)。

请注意,如果还有其他以 <p开头的标签(很长一段时间以来都没有直接编写HTML),那么您也要匹配它们。如果您不想这样做,请使用如下正则表达式:
<p(\s++[^>]*+)?>

这使得 <p>之间的整个部分是可选的。

关于regex - 在Regex中,为什么 “((.|\s)*?)”与 “\s*.*”不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6257401/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com