正则表达式找到带有和不带双方括号的ID(X.123)

时间:2012-11-15 19:48:02

标签: php regex

我正在使用以下内容来查找ID的实例,例如X.123:

$regex_id   = "/\b[Xx][\.][0-9]{1,4}\b/";
preg_match_all($regex_id, $html, $matches_id, PREG_SET_ORDER);

匹配的ID将转换为某些存储的文本。这部分效果很好,但我需要添加一些功能。现在一些ID将用双括号括起来,例如[[X.123]],我需要匹配独立ID或括号内的ID。

独立ID将替换为一些文本(例如:X.123 >> MyText) 括号内的ID将替换为图像(例如:[[X.123]] >> <img src='mypic.png'>

我需要注意如何完成此操作,因此我不会将[[X.123]]替换为[[MyText]]。正如Jason McCreary所说,我可以简单地命令这两个表达式虽然这可能不是最好的方法。

这是与括号内的ID匹配的正确表达式吗?

\[\[[Xx][\.][\s][0-9]{1,4}\]\]

3 个答案:

答案 0 :(得分:4)

天真的方式是两次通过。

  1. 替换[[X.123]]
  2. 替换X.123
  3. 我只需使用数组调用preg_replace()来搜索/替换参数,就可以这样做。

    <强>更新

    [[X.###]]的正则表达式为:

    \[\[[Xx]\.\d{1,4}\]\]
    

答案 1 :(得分:0)

  

这是正确的表达式,以匹配括号内的ID吗?

     

\ [\ [[XX] [\] [\ s]的[0-9] {1,4} \] \]

那里有不必要的角色。

\[\[[Xx]\.[0-9]{1,4}\]\]

修改

...这将与仅限括号的版本相匹配。如果您需要匹配:

(?:\[\[)?[Xx]\.[0-9]{1,4}(?:\]\])?

...如果/匹配时,它们不会创建对括号的反向引用。这里可能存在的一个问题是,您在一侧或另一侧匹配括号但不是两者。 LMK,如果你需要它比那更严格。

干杯

答案 2 :(得分:0)

(\[\[)?[Xx]\.[0-9]{1,4}(\]\])?