【问题标题】:Regular expression only for website正则表达式仅适用于网站
【发布时间】:2010-05-26 12:57:36
【问题描述】:

我是正则表达式的新手。

我只需要在一些文本中找到网站,我正在寻找一个能够找出以下字符串的正则表达式:

www.my.home, http://my.site.it

但是这个正则表达式不应该找到像这样的字符串:

地址@my.site.it 或者如果网站已经在 html 标签内

<a href="http://www.my.site.com/">
  <span style="font-style: normal;">www.mambo-test.org</span>
</a>

我试过这个:

\b((https?://[^])|(www.[^]))

但它也会在href和标签之间找到网站:

<a href="http://www.my.site.com/">
  <span style="font-style: normal;">www.mambo-test.org</span>
</a>

我不知道除了这种情况。

【问题讨论】:

  • 您使用的是什么平台?什么语言?
  • 如果不想在元素属性内找到模式在它们之外(即标签之间,作为文本节点),在哪里 你想找到他们吗?
  • 我正在使用 php,客户可以在富文本字段中插入来自 cms 的文本。有时他们会插入一个链接,这很好,但有时他们只插入带有或不带有协议的文本。我认为用 html 链接标记替换这个文本更清楚,我正在寻找一个正则表达式来查找这种类型的文本。
  • 我已经替换了链接。很抱歉没有更早地理解您的要求。希望新链接有效。

标签: php regex


【解决方案1】:

您正在尝试做的是通过正则表达式解析 HTML 代码

首先,我能感觉到你的痛苦。

其次,详细解释here为什么不应该这样做

第三,如果您的客户在富文本编辑器中插入网络链接,并且他们有时会正确执行,有时却不会,那么……这绝对是一种不好的做法,应该对这些人进行教育。如果他们懒得点击富文本编辑器的“链接”按钮,他们的文本将被视为简单文本而不是链接。他们很快就会明白的。

第四,您使用的是哪种富文本编辑器? TinyMCE 提供了一整套功能和插件,可让您对用户插入的文本进行预处理/后处理容易地。这可能比尝试在 PHP 中编辑该文本更容易。

第五,如果你还需要这样做,你可能想看看this tutorial on how to parse HTML to find links

【讨论】:

    【解决方案2】:

    也许this 可以解决您的问题。

    【讨论】:

    • 这很好,但我还需要找到没有像这样的协议的字符串:www.my.site.org
    • 我刚刚测试了正则表达式。对于这个输入: jodfhsdfhttp://www.my.site.org/fishdfsuidhf 我得到这个输出: www.my.site.org 。你到底在说什么协议?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多