[英]RegEx match string between known strings and after a known text with line breaks
所以,我有这段文字:
<a href="/find/1">testing</a>
<strong>a known text</strong>
<p>testing2</p>
<p>this paragraphs are dynamically</p>
...
<a href="/find/2/">testing again</a>
<a href="/find/3/">testing and again</a>
我想获取已知文本下的所有href
我使用此正则表达式获取所有匹配项: (?<=<a\\ href=")/find/.*?(?=")
但我也得到了结果: / find / 1这是我不知道的结果不想。
我已经尝试过: a known tex[\\w\\W](?<=<a\\ href=")/find/*?(?=")
但它不起作用。 我不知道如何正确完成这项工作。 基本上我只想要/ find / 2 /和/ find / 3
PS:我不是真正在使用C#,而是使用C#制作并使用C#正则表达式的软件。
我有这个正则表达式,它与Marcin的正则表达式有些不同,但是我不习惯在lookbehinds中使用可变长度的正则表达式:
var regex = new Regex(@"(?:a known text|(?<!^)\G)[\w\W]+?((?<=<a\ href="")/find/.*?(?=""))");
相信应该可以使正则表达式更有效率。
\\G
是一个特殊字符,它与先前的匹配结束处匹配,因此在找到第一个/find/
,它将再次尝试匹配。 为了避免它也不能与换行符匹配,我不得不在后面放一个负面的表情。
a known tex[\w\W](?<=<a\ href=")/find/*?(?=")
关于正则表达式,您犯的一些小错误是忘记了[\\w\\W]
的量词和*?
的点*?
在/find/
。 使用a known tex[\\w\\W]+(?<=<a\\ href=")(/find/.*?)(?=")
会让您只有/find/2/
,这已经更好了比什么都没有!
编辑:正如AlanMoore正确指出的那样,您可以简化正则表达式:
var regex = new Regex(@"(?:a known text|(?<!^)\G)[\w\W]+?<a href=""(/find/.*?)""");
并做出来.
匹配换行符,我们可以使用(?s)
并删除[\\w\\W]
部分:
var regex = new Regex(@"(?s)(?:a known text|(?<!^)\G).*?<a href=""(/find/.*?)""");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.