【发布时间】:2017-02-13 12:41:38
【问题描述】:
如何使这个 C# 正则表达式在匹配结果中不包含 URL 之前的第一个字符:
((?!\").)https?:\/\/twitter\.com\/(?:#!\/)?(\w+)\/status(?:es)?\/(\d+)
这将匹配:
Xhttps://twitter.com/oppomobileindia/status/798397636780953600
注意第一个 X 字母。
我希望它匹配不带双引号的 URL。对于那些不以双引号开头的 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 之前有双引号。它也应该在完全匹配时被替换,在匹配字符串之前没有第一个字母。
【问题讨论】: