【问题标题】:How can I fix this regex to allow a specific string?如何修复此正则表达式以允许特定字符串?
【发布时间】:2010-03-17 03:56:04
【问题描述】:

这个正则表达式来自 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?>

显然我不太了解正则表达式。应该如何调整图案以允许空白目标和没有其他目标?

【问题讨论】:

  • 你不应该使用正则表达式来解析 HTML:stackoverflow.com/questions/1732348/…
  • 为什么这肯定是一个有趣的答案,在所有情况下都从字面上理解它似乎有点愚蠢。我使用它是一个简单的清理程序,仅用于确保允许一些基本标签。即使 I 不是,Regex 似乎也能胜任这项任务。 ;)

标签: regex sanitization


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

会按照你的要求去做。

如果你是一个正则表达式的小伙伴,让我推荐 RegExBuddy。它是一个程序,可让您在示例文本或示例文件上测试您的正则表达式。

节省大量时间。

http://www.regular-expressions.info/regexbuddy.html(正则表达式好友)

http://www.regular-expressions.info也是不错的资源

【讨论】:

  • 请注意,此解决方案强制上述属性(href、target 和 title)具有特定顺序。
  • 我正在使用这个 url 进行测试,但没有想出一个有效的模式。 derekslager.com/blog/posts/2007/09/…
【解决方案2】:
<a\shref="(\#\d+|(https?|ftp)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+)"(\stitle="[^"]+")(\starget="_blank")>

【讨论】:

    猜你喜欢
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多