簡體   English   中英

在 C# 中獲取重疊的正則表達式匹配

[英]Getting overlapping regex matches in C#

我有正則表達式1(0*)1和測試字符串1000010001

我想要 2 個匹配項,但我發現只找到 1 個匹配項:

var regex = new Regex("1(0*)1");
var values = regex.Matches(intBinaryString);
// values only has 1 match

regexonline 似乎同意: https ://regex101.com/r/3J9Qxj/1

我究竟做錯了什么?

您已經在第一場比賽中選擇了第二個零前面的 1。

100001 0001
^^^^^^

這是第一場比賽。 其余的只是0001與您的正則表達式不匹配。


如果您使用前瞻/后視,您可以規避這種行為:

(?<=1)(0*)(?=1)

活生生的例子


因為你不能在 JavaScript 中使用lookbehinds,所以只使用一個lookahead就足夠了,以防止重疊:

1(0*)(?=1)

活生生的例子


以及對您的regex101示例的提示:您沒有添加全局標志,這會阻止多個選擇。

您需要匹配重疊的字符串。

這意味着你應該用一個捕獲組( ( +你的模式+ ) )包裝你的模式,並將這個消耗模式放入一個積極的前瞻中,然后匹配所有出現的情況並獲取組 1 值:

(?=(YOUR_REGEX_HERE))

var regex = new Regex("(?=(10*1))");
var values = regex.Matches(intBinaryString)
    .Cast<Match>()
    .Select(m => m.Groups[1].Value)
    .ToList();

查看正則表達式演示

在此處輸入圖片說明

暫無
暫無

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

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