簡體   English   中英

非貪婪的正則表達式無法正常工作

[英]Non greedy regex is not working as expected

我需要使用正則表達式非貪婪方法從字符串中獲取某些內容。 我正在操縱以下字符串:

<a href="/guidance/">Hi</a> </li><li  > <a href="/news/institutional/2012/05/000001asdf">Thanks</a>

從中我需要得到:

<a href="/news/institutional/2012/05/000001asdf">Thanks</a>

我一直在嘗試以下正則表達式:

<a.*?news/.*?/(\d{1,4}\/[01]?\d)?.*?</a>

但是它得到了所有字符串而不是上面提到的一部分字符串。據我了解.*? 捕獲最短的匹配,但未按預期運行。

[^>]是否定字符類, angle 以外的任何字符
支撐。 這會停止非貪婪的.*? 從匹配標簽的結尾
(將其設為半貪婪狀態),當它找不到特定的news主播時。

 #  @"(?s)<a[^>]*?news/[^>/]*?/(\d{1,4}(?:/\d+)*)?[^>]*?>.*?</a>"

 (?s)                  # Modifier, Dot-Matches any character
 <a                    # Open 'a' tag
 [^>]*?                # Any non '>' character
 news/                 # Need 'news/'
 [^>/]*?               # Any non '>' or '/' character
 /                     # Need '/'
 (                     # (1 start), Optional Date ?
      \d{1,4}               # 1-4 digit year
      (?: / \d+ )*          # month / day, etc ..
 )?                    # (1 end)
 [^>]*?                # Any non '>' character
 >                     # End Open '>' tag
 .*?                   # Anything
 </a>                  # Close 'a' tag 

C#示例:

string news = @"
<a href=""/guidance/"">Hi</a> </li><li  > <a href=""/news/institutional/2012/05/000001asdf"">Thanks</a>
<a href=""/rintime/"">Hi</a> <a href=""/news/google/asdf"">GOOGLE</a>
";
Regex RxNews = new Regex(@"(?s)<a[^>]*?news/[^>/]*?/(\d{1,4}(?:/\d+)*)?[^>]*?>.*?</a>" );
Match _mNews = RxNews.Match( news );
while (_mNews.Success)
{
    Console.WriteLine("Found: {0}\r\nGroup 1 = {1}\r\n", _mNews.Groups[0].Value, _mNews.Groups[1].Value);
    _mNews = _mNews.NextMatch();
}

輸出:

Found: <a href="/news/institutional/2012/05/000001asdf">Thanks</a>
Group 1 = 2012/05/000001

Found: <a href="/news/google/asdf">GOOGLE</a>
Group 1 =

暫無
暫無

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

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