簡體   English   中英

正則表達式超級非貪婪

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM