![]() |
1
8
你描述的行为不是
贪婪的
它是
占有的
. 普通的贪婪量词尽可能匹配原来的量词,但是如果需要的话,可以让整个regex匹配(我喜欢把它们看作
贪婪但宽容
)这就是发生在你身上的事情:
一些正则表达式(包括Java和PHP)支持 possessive quantifiers 不会退缩,即使这会导致整个比赛失败。.NET不具备这些功能,但它具有以下优点: atomic groups . 无论你放在一个原子组中的是什么,它都像一个独立的regex——要么在应用它的位置匹配,要么不匹配,但它永远不会返回并尝试匹配比原来更多或更少的地方,仅仅是因为其余的regex失败了(也就是说,regex引擎从不后退) 进入之内 原子群)。以下是解决问题的方法:
如果字符串以百分号开头,则
注意,原子群(或所有格量词)不需要解决这个问题,如@dav所示。但它们是非常强大的工具,很容易使 不可能的 和 可能的 或 太慢了 和 尽可能光滑 . |
![]() |
2
9
如果可以的话,regex总是尝试匹配整个模式-“贪心”并不意味着“如果存在的话,总是抓住字符”,而是意味着“如果存在的话,总是抓住字符” 可以用它来比赛 “。 相反,你可能想要这样的东西:
它将匹配a%后跟3个字符,或非-%,非空白后跟2个以上。 |
![]() |
3
1
我总是喜欢看重复的问题,看看人们花在他们身上多少时间来“节省时间”
虽然在现实生活中我会更明确一些,但我只是这样写的,因为出于某种原因,有些人认为代码简洁是一种优势(我称之为反优势,但现在这不是流行的观点)。 |
![]() |
4
0
尝试一下根据DAV的原始版本修改的regex:
打开regex选项“^和$match at line breaks”。 |
![]() |
DotFX · RegEx捕获关键字前但括号后的所有内容 4 月前 |
![]() |
Andrus · 如何在sql中查找第二个匹配项 4 月前 |
![]() |
iato · 确保正则表达式不从命名材料中的数字中提取 5 月前 |
![]() |
vr8ce · 非成对标记中特定字符的正则表达式 5 月前 |
![]() |
MARTIN · 交换第一个和最后一个单词,反转所有中间的字符 5 月前 |
![]() |
Carsten · 使用最近的搜索模式更改文本块 5 月前 |