簡體   English   中英

正則表達式或不匹配第一個表達式

[英]RegEx with OR not matching first expression

我正在嘗試使用Or創建正則表達式

我有這個

(?<data1>a[^b]+b)|(?<data2>^[^b]+b)

目標是捕獲a后面a所有內容,或者當a不存在時捕獲所有內容。

data = "123412123b" result should be "123412123b"  
data = "123412a123b" result should be "a123b"

它總是與的第二部分匹配, or在與分組(data2)捕獲時匹配,有人可以告訴我為什么會這樣

默認情況下,該字符串是從左到右解析的,當第一個選項失敗時,正則表達式引擎將嘗試第二個。 在第二備選方案相匹配相同的文字的第一個,因此,當字符串包含b后比其它1個或多個字符b ,第二個選擇將總是會贏。

您可以通過傳遞RegexOptions.RightToLeft選項以使其在相反的方向尋找匹配項來覆蓋.NET中的默認正則表達式引擎行為:

var pattern = "a[^b]+b|^[^b]+b";
var result = Regex.Match("123412a123b", pattern, RegexOptions.RightToLeft);
if (result.Success)
    Console.WriteLine(result.Value);

參見C#演示

這個怎么樣?

(?<data>a?[^ab]+b)

您可以在下面嘗試-易於理解。

var reg = @"(.*)([a].*)";
string data = "123412x123b";
var gps = Regex.Match(data, reg).Groups;

string result = gps.Count > 1 ? gps[2].Value : data;

暫無
暫無

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

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