簡體   English   中英

Perl正則表達式中的貪婪vs非貪婪

[英]Greedy vs Non-Greedy in Perl Regex

這是我要在其上執行正則表達式的文本行:

"MATS"?"Base Revenue Element"?#Mi?#Mi

這是我的正則表達式:

s/\?[^"]/FOUND/;

我希望得到:

"MATS"?"Base Revenue Element"?FOUNDMi?FOUNDMi

但是我得到了:

"MATS"?"Base Revenue Element"?FOUNDMi?#Mi

所以我將其切換為:

s/\?[^"]?/FOUND/;

但是現在我得到:

"MATS"FOUND"Base Revenue Element"?#Mi?#Mi

所以:

  1. 為什么只執行一次查找然后停在文本行中?
  2. 為什么加上非貪婪? 使它找到第一個問號,即使它位於雙引號旁邊?
  1. 因為s///默認情況下僅做一次替換。 您可以使用g修飾符使它盡可能多地執行: s/\\?[^"]/FOUND/g;

  2. 因為? 不是原子后面的“非貪婪修飾語”,而是“零或一個”量詞。 \\?[^"]?匹配問號( 可選)后跟非引號字符;如果后面跟引號,則僅匹配“?”。貪婪實際上與這里發生的事情無關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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