需要更新我的正则表达式模式以匹配罗马数字

时间:2015-10-06 12:49:22

标签: php regex

我使用此模式:[ ]\bM{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})\b来匹配字符串中的所有罗马数字。 以下是我需要的一些例子:

string1 VI STRING4 I STRING5 1340 I 2 STRING6 III STRING7 V STRING11 STRING12 VI STRING13! IX STRING14 VI . STRING15 - STRING16_ V STRING17 1/2 VI STRING18 VIII XIII (2011) V (2012) String19 VP XII

将导致:

string1 STRING4 STRING5 1340 2 STRING6 STRING7 STRING11 STRING12 STRING13! STRING14 . STRING15 - STRING16_ STRING17 1/2 STRING18 XIII (2011) V (2012) String19 VP XII

现在的问题是我有这个字符串:WORD1 DI WORD2,上面的模式与DI匹配。 但是我希望它保留:WORD1 DI WORD2,所以我只想在它们位于字符串末尾时匹配罗马数字(除非只有一个单词如XII)。

所以我仍然希望保持上面的结果,但我需要添加一个规则来获得这个:

WORD1 DI WORD2 - > WORD1 DI WORD2

请帮忙吗?

由于

1 个答案:

答案 0 :(得分:0)

这就是我要用的:

$result = preg_replace("/\s(I|V|X|L|M|D|C)+$/gm", "", $str);

这为您的示例提供了预期的结果。