0

我正在使用以下内容来查找 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}\]\]
4

3 回答 3

4

一种天真的方法是做两次传球。

  1. 代替[[X.123]]
  2. 代替X.123

我会通过一次调用来preg_replace()使用数组作为搜索/替换参数来做到这一点。

更新

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

\[\[[Xx]\.\d{1,4}\]\]
于 2012-11-15T19:50:45.237 回答
0

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

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

里面有多余的字符。

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

编辑

...这将匹配仅括号版本。如果你需要同时匹配:

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

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

干杯

于 2012-11-15T19:54:35.290 回答
0
(\[\[)?[Xx]\.[0-9]{1,4}(\]\])?
于 2012-11-15T19:58:43.593 回答