preg_match难度大

时间:2011-11-28 07:48:22

标签: php regex

我在使用preg_match时遇到了一些困难。我正在尝试匹配罗马数字,如下所示:

$string='This is roman XI and some other ones: XMCIII, like this.XXVIII'."\n";

preg_match('/(\s|\.)M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})\s/',$string,$matches);

print_r($matches);

它应匹配前面带有空格或句点并以空格结尾的任何罗马数字。但它返回以下内容:

Array
(
    [0] =>  XI
    [1] =>
    [2] =>
    [3] => X
    [4] => I
)

1 个答案:

答案 0 :(得分:1)

正则表达式中有{0,4}或{0,3}范围,这意味着这些部分是可选的。你得到空格,因为空间[无]空间成为有效的匹配。

您只需使用array_filter

过滤掉数组中的空白结果