2009-08-30 21 views
0

我想了解如何(?<名稱>模式)在正則表達式中工作。有一個很好的鏈接,或有人提供一個簡單的解釋?幫助理解正則表達式名稱模式

+0

這通常用於反向引用問題。 參見: http://www.regular-expressions.info/named.html – Mischa 2009-08-30 14:20:02

回答

0

Mastering Regular Expressions

命名捕獲:

\b(?<Area>\d\d\d\)-(?<Exch>\d\d\d)-(?<Num>\d\d\d\d)\b 

這種 「填充名稱」 區域,可置換,和Num與美國電話號碼的部件。程序然後可以通過其名稱引用每個匹配的子字符串,例如VB.NET中的RegexObj.Groups(「Area」)和大多數其他.NET語言,C#中的RegexObj.Groups [「Area」],RegexObj.group( 「區域」),而$匹配PHP中的[「區域」]。 結果是更清晰的代碼。

在正則表達式本身中,捕獲的文本可以通過\ k與.NET和Python和PHP中的(?P = Area)獲得。

使用Python和.NET(但不支持PHP),您可以在同一表達式中多次使用相同的名稱。

0

此功能爲您提供了使用友好名稱而不是索引輕鬆引用您從代碼(請參閱示例)或正則表達式本身捕獲的內容的可能性。 一個簡單的例子:


Regex regex = new Regex(@"(?<foo>[fF][oO][oO]) \k<foo>"); 

foreach (Match match in regex.Matches("bar fOO foO foO f0O")) 
{ 
    Console.WriteLine(match); 
} 

打印

 
foO foO 

此正則表達式可以讓你趕上一個「富」與資本小寫字母的任意組合,但只,如果它是由另一個「富先「具有完全相同的大小寫字母集合。您還可以使用match.Groups["name"]語法引用您的組,因此在此示例中,match.Groups["foo"]將返回「foO」。

編輯:將使用\ k <名稱>語法的新示例。