我想在字符串中捕获罗马数字(低于 80 的数字就足够了)。我在How do you match only valid roman numbers with a regular expression? 中找到了很好的基础?. 问题是:它处理整个字符串。我还没有找到如何检测字符串中的罗马数字的解决方案,因为没有任何强制性,每个组都可能是可选的。到目前为止,我尝试过这样的事情:
my $x = ' some text I-LXIII iv more ';
if ( $x =~ s/\b(
(
(XC|XL|L?X{0,3}) # first group 10-90
|
(IX|IV|V?I{0,3}) # second group 1-9
)+
)
\b/>$1</xgi ) { # mark every occurrence
say $x;
}
__END__
><some>< ><text>< ><>I<><-><>LXIII<>< ><>iv<>< ><more><
desired output:
some text >I<->LXIII< >iv< more
所以,这个也可以自己捕获单词边界,因为所有组都是可选的。如何完成?如何使这两组中的一组成为强制性的,而无法分辨哪一组是强制性的?也欢迎其他捕捉罗马人的方法。