如何使此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之前有双引号。也应在完全匹配的情况下替换它,而在匹配字符串之前不能有第一个字母。
在(?<!")
后面使用否定式:
var re = @"(?<!"")https?://twitter\.com/(?:#!/)?(\w+)/status(?:es)?/(\d+)";
在(?<!")
有不能是手段"
紧接在当前位置之前。
在C#中,您不需要/
在模式内部进行转义,因为在定义regex时不使用regex分隔符。
请注意C#语法:如果要"
在逐字字符串文字内定义一个双字,请将该文字加倍。在常规字符串文字中,对"
和进行转义\
。
var re = "(?<!\")https?://twitter\\.com/(?:#!/)?(\\w+)/status(?:es)?/(\\d+)";
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句