C#Regex,匹配但不包括匹配字符串之前的第一个字符

时间:2017-02-13 12:41:39

标签: c# regex

如何使此C#Regex在匹配结果中不包含URL之前的第一个字符:

((?!\").)https?:\/\/twitter\.com\/(?:#!\/)?(\w+)\/status(?:es)?\/(\d+)

这将匹配:

Xhttps://twitter.com/oppomobileindia/status/798397636780953600

注意第一个X字母。

我希望它匹配以双引号开头的网址。对于那些不以双引号开头的URL,也不包括https之前的第一个字符。

我在代码中使用的一个实际示例:

 var str = "<div id=\"content\">
             <p>https://twitter.com/oppomobileindia/status/798397636780953600</p>
             <p>\"https://twitter.com/oppomobileindia/status/11111111111111111111</p></div>";

 var pattern = @"(?<!""')https?://twitter\.com/(?:#!/)?(\w+)/status(?:es)?/(\d+)";//

var rgx = new Regex(pattern);

var results = rgx.Replace(str, "XXX");

在上面的示例中,只应替换第一个URL,因为第二个URL在URL之前具有双引号。它也应该在完全匹配时替换,而不是匹配字符串之前的第一个字母。

1 个答案:

答案 0 :(得分:2)

使用(?<!")负面反馈:

var re = @"(?<!"")https?://twitter\.com/(?:#!/)?(\w+)/status(?:es)?/(\d+)";

(?<!")表示当前位置之前不能有"

在C#中,您不需要在模式中转义/,因为在定义正则表达式时不使用正则表达式分隔符。

关于C#语法的注意事项:如果要在逐字字符串文字中定义",请将其加倍。在常规字符串文字中,转义"\

var re = "(?<!\")https?://twitter\\.com/(?:#!/)?(\\w+)/status(?:es)?/(\\d+)";
相关问题