0

我有以下代码:

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

这将添加一个跨度标签,例如

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

我现在有几个字符串要匹配,它们是:

[AZ]。

[AZ]。[1-99]。

[AZ].[1-99].[1-99]。

[AZ].[1-99].[1-99].[1-99]。

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

谢谢,

史蒂夫

4

2 回答 2

1

Basically, you're matching a capital letter followed by a period first; then, it can be followed by zero to three occurrences of a number followed by a period:

/^[A-Z]\.(?:\d+\.){0,3}/
于 2013-06-14T15:44:20.570 回答
1

你可以用这个

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

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

$element['#title'] = preg_replace('~^[A-Z]\.(?>[0-9]{1,2}\.?+)*~', '<span>$0</span>', $element['#title']);
于 2013-06-14T15:07:11.163 回答