[英]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.