【问题标题】:Can't Get PHP RegEx to Match / and - Literals无法让 PHP RegEx 匹配 / 和 - 文字
【发布时间】:2013-02-23 16:57:18
【问题描述】:

我正在使用正则表达式来匹配我的模板文件中的链接对象。基本上,一个链接被识别出来,然后根据用户是否启用了 JS 将其转换为 javascript 或 HTML。

示例链接如下所示:

<div id="someDiv">{_LINK_9_link text here_noclass_noid_}</div>

这是我用来在代码中查找这些对象的正则表达式:

$linkExp = '/\{_LINK_([0-9]+)_([a-z0-9 ]+)_([a-z0-9]+)_([a-z0-9]+)_\}/i';

就目前而言,此代码可以很好地执行上述示例,其中链接文本可以包含字母、数字或空格。但是,当我尝试在链接文本中添加 /- 时,我无法让正则表达式继续工作。

这是我尝试过的:

<!-- html link code -->
<div id="someDiv">{_LINK_9_tips/suggestions_noclass_noid_}</div>
// php link expression
$linkExp = '/\{_LINK_([0-9]+)_([a-z0-9 \/\-]+)_([a-z0-9]+)_([a-z0-9]+)_\}/i';

但由于/,它仍然找不到匹配项。如果我去掉斜线,它工作正常。关于如何在正则表达式中匹配文字 /- 的任何想法?允许比字母、数字、空格、连字符或斜杠更多的字符会很好,但我是正则表达式的新手,所以我真的不知道我在做什么。如果有人可以帮我修复它,以便它可以匹配链接文本的任何内容(甚至是符号,例如 &、%、$ 等),那也将不胜感激。

提前致谢。

【问题讨论】:

  • 1. [0-9] = [\d] 2. [a-Z0-9] = [\w]
  • 你的第二个正则表达式匹配 html 对我来说很好..你是如何使用它的?
  • 回声@ExplosionPills,it works for me
  • @DreamEater \w 还包括下划线,并且根据语言环境,它可以包括其他字母字符(后者可能不是问题)
  • @Sepster,是的,空格字符绝对没问题。

标签: php regex preg-replace preg-match pcre


【解决方案1】:

你几乎是对的,使用

$linkExp = '/\{_LINK_([0-9]+)_([a-z0-9 \/-]+)_([a-z0-9]+)_([a-z0-9]+)_\}/i';
  1. 在[ ]里面使用'-'来表示范围,例如[a-z],但是如果放在最后,则认为是多一个字符,例如[a-z-]会匹配字母+'- '

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多