PHP正则表达式添加跨度到文本字符串匹配

时间:2013-06-14 15:01:59

标签: php regex

我有以下代码:

if (preg_match('/^[A-Z]\./', $element['#title'])) {
  $element['#title'] = preg_replace('/^[A-Z]\./', '<span>$0</span>', $element['#title']);
}

这将添加一个span标签,例如

<span>A.</span> This is a title

我现在有几个要匹配的字符串:

[A-Z]。

[A-Z]。[1-99]。

[A-Z]。[1-99]。[1-99]。

[A-Z]。[1-99]。[1-99]。[1-99]。

正则表达式不是我的强项!有人可以帮帮忙吗?

谢谢,

史蒂夫

2 个答案:

答案 0 :(得分:1)

您可以使用此

^[A-Z]\.(?>[0-9]++\.?+)*

请注意,您之前不需要使用preg_match进行测试,因为preg_replace仅在找到内容时才进行替换:

$element['#title'] = preg_replace('~^[A-Z]\.(?>[0-9]{1,2}\.?+)*~', '<span>$0</span>', $element['#title']);

答案 1 :(得分:1)

基本上,你匹配一个大写字母,然后是一个句号;然后,可以跟随零到三次出现的数字后跟一段时间:

/^[A-Z]\.(?:\d+\.){0,3}/