[英]Regex Super Non-Greedy
我正在嘗試構建“超級非貪婪”正則表達式,因為它缺少更好的用語。 我遇到的問題歸納如下:
https://regex101.com/r/wuwOGd/2
正則表達式: \\/\\*\\*(.*?)\\*\\/\\w+\\d+
示例字符串: /**word1*/asdf /**word2*/abc123
我想要它做什么:只匹配第二個令牌,這樣我就可以提取word2
。
它在做什么:匹配word1*/asdf /**word2
,這在技術上是正確的,因此我不能責怪正則表達式按照我的要求去做。 但是,是否有一種方法可以使正則表達式“ fail”,只要它必須擴展到第一個*/
?
在這種特殊情況下,我使用python來匹配帶有某些簽名的函數附帶的注釋塊。
編輯:
如下所示,事實證明我搜索的魔術字是“經過磨煉的”,而不是“超級”!
您可以使用否定類而不是非貪婪重復: \\/\\*\\*([^*]*)\\*\\/\\w+\\d+
https://regex101.com/r/wuwOGd/3
因為您要查找的令牌以*
分隔,所以非常安全。
/\*{2}((?:(?!\*/).)*)\*/\w+\d+
或者,不必捕獲它(假設PCRE)。 查看正則表達式在這里使用
/\*{2}\K(?:(?!\*/).)*(?=\*/\w+\d+)
此方法使用經過調節的貪婪令牌,以確保它與找到*/
以外的任何字符匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.