如何修复此正则表达式以允许特定字符串?

时间:2010-03-16 19:49:33

标签: regex sanitization

这个正则表达式来自Atwood,用于过滤掉除href和标题以外的任何东西的锚标记:

 <a\shref="(\#\d+|(https?|ftp)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+)"(\stitle="[^"]+")?\s?>

我需要允许特定匹配的附加属性:target =“_ blank”。所以应该允许以下网址:

 <a href="http://www.google.com" target="_blank">

我尝试将模式更改为:

 <a\shref="(\#\d+|(https?|ftp)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+)"(\stitle="[^"]+")(\starget="_blank")?\s?>
 <a\shref="(\#\d+|(https?|ftp)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+)"(\stitle="[^"]+")(\starget=\"_blank\")?\s?>

显然我不太了解正则表达式。如何调整模式以允许空白目标而不是其他目标?

2 个答案:

答案 0 :(得分:1)

<a\shref="(\#\d+|(https?|ftp)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+)"\s(target=\"_blank\")>

会做你要问的事。

如果你是正则表达式,请让我推荐RegExBuddy。这是一个允许您在示例文本或示例文件上测试正则表达式的程序。

节省了大量时间。

http://www.regular-expressions.info/regexbuddy.html(Regex Buddy)

http://www.regular-expressions.info也是一个很好的资源

答案 1 :(得分:1)

<a\shref="(\#\d+|(https?|ftp)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+)"(\stitle="[^"]+")(\starget="_blank")>