我有一个接近但不完全正则的正则表达式:
(https?)://([\w+?\.\w+])+([a-zA-Z0-9\~\!\@\#\$\%\^\&\*\(\)_\-\=\+\\\/\?\.\:\;\'\,\<\>]*)
它应该在被替换之前捕获其中包含特殊代码的链接。这是一个示例文本:
some leading text <a>http://subsite.domain.com/somepage.aspx?querystring1=<#specialcode#></a>. Some text afterwards
另一个例子:
some leading text <a>http://subsite.domain.com/somepage.aspx?querystring1=<#first#>&querystring2=<#another#>&querystring3=foo&querystring4=<#bar#></a>
甚至只是&#34;普通&#34;链接:
some leading text <a>http://subsite.domain.com/somepage.aspx?querystring1=foo&querystring2=bar</a>
我想捕获所有这些链接,没有标记,有些链接包含分隔符。
根据测试人员的说法,它已经关闭,但它会在结束时和期间继续关闭标签。我知道为什么,我只是不知道如何解决它。在我的例子中,我需要捕获&lt;#specialcode#&gt;以及之后的任意数量的其他查询字符串。没有太多细节,&lt;#和#&gt;是应用程序中的分隔符。这里的任何帮助将不胜感激。
我从这里获取了根正则表达式:Get url from a text 我在这里尝试过测试:http://www.regextester.com/
答案 0 :(得分:1)
假设输入文本不是正确的HTML文档,并且假设您只是想提取网址和查询字符串和参数,那么这个正则表达式将会这样做:
(https?:\/\/[^?<]+)[?]?(([^=<]+)=(<#[^&<]*#>|[^&<]*)&?)*
这基于以下测试输入:
some leading text <a>http://subsite.domain.com/somepage.aspx?querystring1=<#specialcode#></a>. Some text afterwards
some leading text <a>http://subsite.domain.com/somepage.aspx?querystring1=<#specialcode#>&querystring2=foo</a>. Some text afterwards
some leading text <a>http://subsite.domain.com/somepage.aspx?querystring1=<#specialcode#>&querystring2=foo&querystring3=<#specialcode2#></a>. Some text afterwards
some leading text <a>http://subsite.domain.com/somepage.aspx</a>. Some text afterwards
结果将在捕获组中。
如果给定的文本是HTML文档,那么正则表达式必须更改,因为它不在<a>http://linkhere.com</a>
内的链接中,而是在href
属性中:<a href="http://linkhere.com">link here</a>
答案 1 :(得分:0)
在比赛之间没有特定棋子的情况下获得比赛,未知出现? 只用一个正则表达式就很难做到。
分开工作可能更容易。
找到链接的正则表达式(包含奇怪的&lt; ##&gt;标记)。
(https?):(\/+.*)(?=<\/a>)
第二个正则表达式找到&amp;删除那些奇怪的&lt; ##&gt;标记:
[&]?\w+=<#[^#]*#>