我该如何搭配
<a href="logout.html">Logout</a>
而这个
<a href='logout.html'>Logout</a>
编辑(并捕获logout.html和logout)
但这不是:
<a href="'.$var.'">'.$another_var.'</a>
现在我有这个
"^.*<a.*href=\"\\([^\"]+\\)\"[^>]+>\\([^<]+\\)</a>"
但是它只匹配双引号,并且也接受变量链接。
Avinash Raj解决报价问题方法的可行/安全版本是:
<a .*?\bhref=\(['"]\)[^'"]*\1.*?>.*?</a>
作为字符串:
"<a .*?\\bhref=\\(['\"]\\)[^'\"]*\\1.*?>.*?</a>"
注意不要在不安全的地方使用贪婪运算符!例如:<a.*href
是一个相当糟糕的主意。
编辑:原来,您只需要匹配中的URL和链接文本,在这种情况下,您将在这些周围添加其他组:
"<a .*?\\bhref=\\(['\"]\\)\\([^'\"]*\\)\\1.*?>\\(.*?\\)</a>"
然后询问第2组和第3组匹配的字符串。
在elisp中,您很可能会使用(match-string 2)
&(match-string 3)
,但这取决于您使用正则表达式的方式。
还要注意,正则表达式不能匹配平衡表达式,因此在这种情况下它们不能总是提供完美的解决方案,并且您依赖于要处理的数据的假设。如果您的URL包含引号,则此正则表达式将失败。
当然,elisp通常在处理平衡表达式方面有很多支持,因此您可以改用更基本的形式匹配元素,然后使用forward-sexp
更可靠的方式将其从开始引号移到结束引号。显然,这超出了这个问题的范围。
编辑2:显然,我实际上必须证明这一点。
与您原来的正则表达式之间的唯一区别是,由于您随后对问题进行了编辑,因此添加了额外的组。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句