我使用PHP突出显示字符串中的所有 roman
数字。
例如:
Protocol XXXIV/14 from session...
Protocol XXIX/13 from session...
Protocol XXXV/13 from session...
所以我在http://regexr.com/2uhln找到了一个完美的例子。它适用于上面的示例,但是当我尝试在php中使用它时,它会停止工作。
我的PHP代码是
$subject = "Protocol XXXV/13 from session...";
$pattern ='/(?:XL|L|L?(?:IX|X{1,3}|X{0,3}(?:IX|IV|V|V?I{1,3})))/';
preg_match($pattern,$subject,$matches);
它只输出罗马数字的1-3个字符,所以
XXXIV - gives XXX
XXIX - gives XX
XXXV - gives XXX
我有两个问题:
答案 0 :(得分:0)
更改图案的顺序。也就是说,将最长的模式放在第一个,然后放入最终的模式。语法就像long|medium|short
。这样最长的字符串将首先匹配。
$re = "~L?(?:X{0,3}(?:IX|IV|V|V?I{1,3})|IX|X{1,3})|XL|L~m";
$str = "Protocol XXXIV/14 from session...\nProtocol XXIX/13 from session...\nProtocol XXXV/13 from session...";
preg_match_all($re, $str, $matches);
print_r($matches);
<强>更新强>
\b(?:X?L?(?:X{0,3}(?:IX|IV|V|V?I{1,3})|IX|X{1,3})|XL|L)\b