[英]Perl greedy regex is not acting greedy
.*
是貪婪的子模式,但不考慮分組。 分組是用一對未轉義的括號定義的(請參閱使用括號進行分組和捕獲 )。
查看組邊界在哪里:
s/(.*?)\((.*)\)/$2/
| G1| |G2|
因此,匹配的\\(
和\\)
(
和)
在組之外 ,並且不會成為$1
和$2
。
如果您需要)
作為$2
一部分,請使用
s/(.*?)\((.*\))/$2/
^
正則表達式引擎從左到右同時處理字符串和模式。 首先處理第一個(.*?)
,它與第一個文字匹配(
因為它是惰性的符號(在可以返回有效匹配之前,請盡可能少地匹配字符),以及放在(
之前的整個部分)成第1組堆疊。然后,將(
匹配,但不是捕獲的,然后(.*)
大於換行到最后其他任何0+字符匹配)
符號,並放置到捕獲組2然后, )
是只是相匹配。問題的關鍵是, .*
抓住整個字符串到最后,但隨后發生回溯自引擎試圖以適應最終)
的格局。 )
必須匹配,但不能在您的模式中捕獲,因此,由於組邊界位置,它不屬於組2。 您可以在此regex演示頁面上看到regex調試器 ,以了解模式如何與您的字符串匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.