我在使用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
)
答案 0 :(得分:1)
正则表达式中有{0,4}或{0,3}范围,这意味着这些部分是可选的。你得到空格,因为空间[无]空间成为有效的匹配。
您只需使用array_filter
过滤掉数组中的空白结果