|
1
34
你应该用一号,因为二号是不好的做法。考虑开发人员谁来后,你想匹配字符串后面跟着一个感叹号。他应该使用:
或:
当你的主题是:
第一个regex匹配:
当第二个regex匹配时:
尽可能具体。尽可能使用否定字符类。 另一个区别是[^“]*可以跨行,而*除非使用单行模式,否则不会跨行。[^“\n]*也排除换行符。 至于回溯,它匹配的每个字符串中的每个字符的第二个regex回溯。如果缺少右引号,两个正则表达式都将回溯整个文件。只有回溯的顺序不同。因此,理论上,第一个正则表达式更快。在实践中,你不会注意到区别。 |
|
|
2
11
更复杂,但它处理转义引号和转义反斜杠(转义反斜杠后面跟着引号不是问题)
实例:
|
|
|
3
9
我建议:
但这仅仅是因为它处理转义的引号字符,并允许“和”都是引号字符。我还建议您仔细阅读这篇深入探讨这个问题的文章: http://blog.stevenlevithan.com/archives/match-quoted-string 但是,除非您有严重的性能问题或无法确定嵌入的引号,否则请使用更简单易读的:
我必须承认,非贪婪模式不是基本的Unix风格的“ed”正则表达式,但它们变得相当普遍。我仍然不习惯将运算符分组为(?东西) |
|
|
4
5
我想说第二个更好,因为它在终止时失败得更快
|
|
|
5
3
我会选第二名,因为它更容易阅读。但我仍然希望匹配空字符串,因此我将使用:
|
|
|
6
1
从性能的角度(非常重,长串的长循环)我可以想象
比快
因为后者会对每一步做额外的检查:查看下一个字符。前者可以在不经意间将绳子翻转过来。 正如我所说,在现实世界中,这几乎不明显。因此,我会选择第二个(如果我当前的regex风格支持它,也就是说),因为它更可读。当然,如果不是第一名的话。 |
|
|
7
1
当输入中的其他地方存在边界字符(示例中为doublequeotes)时,使用negated character类可防止匹配。 您的示例1:
只匹配最小的一对匹配的引号——非常好,大多数时候这就是您所需要的。但是,如果您有嵌套引号,并且您对最大的匹配引号对(或所有匹配引号)感兴趣,那么您的情况就复杂得多。 幸运的是,达米安·康威已经做好了救援准备: Text::Balanced 如果您发现有多个匹配的引号,是否有。它还具有匹配其他成对标点的优点,例如括号。 |
|
|
8
0
我比较喜欢第一种雷吉酒,但这当然是一种口味问题。 第一个可能更有效?
和一些更复杂的事情有关吗? |
|
|
9
0
考虑到我甚至不知道“*?”直到今天,我用正则表达式已经20多年了,我还是会投赞成票。它当然清楚地说明了您要做什么——您要尝试匹配一个不包含引号的字符串。 |
|
|
DotFX · RegEx捕获关键字前但括号后的所有内容 1 年前 |
|
|
Andrus · 如何在sql中查找第二个匹配项 1 年前 |
|
|
iato · 确保正则表达式不从命名材料中的数字中提取 1 年前 |
|
|
vr8ce · 非成对标记中特定字符的正则表达式 1 年前 |
|
|
MARTIN · 交换第一个和最后一个单词,反转所有中间的字符 1 年前 |
|
|
Carsten · 使用最近的搜索模式更改文本块 1 年前 |