我知道你可以阻止從正確的貪婪正則表達式使用「?」標誌。但左側呢?假設我有這個:如何阻止從左邊的貪婪正則表達式
X test X junk X Hello Y junk2 Y
如何強制它只在X和Y之間選擇「Hello」?
我至今正則表達式:
/X(.*?)Y/g
謝謝。
我知道你可以阻止從正確的貪婪正則表達式使用「?」標誌。但左側呢?假設我有這個:如何阻止從左邊的貪婪正則表達式
X test X junk X Hello Y junk2 Y
如何強制它只在X和Y之間選擇「Hello」?
我至今正則表達式:
/X(.*?)Y/g
謝謝。
您可以使用像下面這樣的模式:/X\s+([^XY]+)\s+Y/g
。
你可以使用這個模式X([^XY]+)Y/g
反向搜索前,目標字符串,然後搜索顛倒正則表達式。在蟒蛇:
m=re.search(r'Y(.*?)X',reversed(s))
if m:
return reversed(m.group(1))
同樣的問題,有2個」Y 「s。答案將會是X你好Y junk2 Y –
我錯過了右邊的第二個Y.這個想法只有在右邊有一個獨特的模式時纔有效。 –
在Perl以下工作:
$_='X test X junk X Hello Y junk2 Y';
if (/X(?!.*X)(.*?)Y/) {
print "$1\n";
}
else {
print "No match!\n";
}
的(?!.*X)
可以確保第一X後面沒有第二個。
貪婪的操作符正在做它應該做的事情。從第一個X中,選擇Y的最小字符。 –
@RobertSlaney:你將如何翻譯'從最右邊的X中選擇...在正則表達式中? – Reacen
這取決於您正在使用的正則表達式引擎,以及您是否有向後斷言(JavaScript不)。下面的Nambi的解決方案找到X和Y之間不包含X和Y的所有文本 –