gpt4 book ai didi

regex - 如何将引号分隔的字符串与正则表达式匹配?

转载 作者:行者123 更新时间:2023-12-03 08:45:16 25 4
gpt4 key购买 nike

如果我尝试将引号分隔的字符串与正则表达式匹配,那么以下哪个是“更好”的(其中“更好”意味着更有效并且不太可能做一些意外的事情):

/"[^"]+"/ # match quote, then everything that's not a quote, then a quote

或者
/".+?"/   # match quote, then *anything* (non-greedy), then a quote

对于这个问题,假设空字符串(即“”)不是问题。在我看来(不是正则表达式新手,但肯定不是专家)这些将是等效的。

更新 : 仔细想想,我想换个 +字符到 *无论如何都会正确处理空字符串。

最佳答案

你应该使用第一,因为第二是不好的做法。考虑到您后面的开发人员想要匹配后跟感叹号的字符串。他是否应该使用:

"[^"]*"!

或者:
".*?"!

当您拥有主题时,差异就会出现:
"one" "two"!

第一个正则表达式匹配:
"two"!

而第二个正则表达式匹配:
"one" "two"!

总是尽可能具体。尽可能使用否定字符类。

另一个区别是 [^"]* 可以跨行,而 .* 则不能,除非您使用单行模式。 [^"\n]* 也不包括换行符。

至于回溯,第二个正则表达式对其匹配的每个字符串中的每个字符进行回溯。如果缺少结束引号,则两个正则表达式都将回溯整个文件。只有回溯的顺序不同。因此,理论上,第一个正则表达式更快。在实践中,您不会注意到差异。

关于regex - 如何将引号分隔的字符串与正则表达式匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/375104/

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