我有以下正则表达式:
.*(?:(?:(?<!a)cc|string).*number).*
Run Code Online (Sandbox Code Playgroud)
我试图理解?括号之间的字符串开头是什么意思.我知道了吗?意味着前一个字符'a'可以重复零次或一次.但它出现在字符串的开头是什么意思?
答案需要一点历史课.当Larry Wall想要在Perl中为正则表达式添加新功能时,他不仅可以更改现有元字符的含义,还可以为没有它们的字符指定特殊含义.这会破坏许多一直有效的正则表达式.相反,他必须寻找永远不会出现在正则表达式中的字符序列.
最初只有一种群体:我们现在称之为捕获群体.左括号是一个元字符,所以用量词跟随它是没有意义的.你可以匹配一个文字的开放式零或一次\(?,或者你可以匹配(和捕获)一个文字问号(\?),但是如果你试图(?在正则表达式中使用它会引发异常.
Larry改变了规则,因此(?可能出现在正则表达式中,但它必须形成一个特殊组构造的开头,这需要至少一个字符.所以,要回答你的问题,字符串不会以?.序列(?:形成单个标记,表示非捕获组的开始.我们也有(?=和(?!正负向前看符号,(?<=并(?<!为lookbehinds,等等.
| 归档时间: |
|
| 查看次数: |
45 次 |
| 最近记录: |