我目前有这个(C#):
http:\/\/([^""']*[^""']*).*?((?=<)|(?=$))
正如您所见,我试图使用前瞻来终止<
或行尾的正则表达式。
以上不起作用:(如果我删除了|(?=$)
,那么只有<
在字符串中才会有效。如何在<
或{{$
时终止正则表达式1}}发生了吗?(注意:我不想在我的结果中加入<
)
任何指针都会非常感激。
答案 0 :(得分:2)
您还需要在字符类中添加<
符号,否则捕获组也会贪婪地捕获<
字符。
http:\/\/([^"'<]*[^"'<]*).*?(?=<|$)
此[^"'<]*[^"'<]*
将写为[^"'<]*
,
@"http:\/\/([^""'<]*).*?(?=<|$)"
如果原始字符串有多行,则不要忘记在字符类中包含\n
。最好包含多行修饰符。
@"(?m)http:\/\/([^""'<\n]*).*?(?=<|$)"
答案 1 :(得分:1)
当&lt;&lt;时,我怎样才能让正则表达式终止?或$
您可以使用此前瞻与替换:
(?=<|$)