文字列内のローマ数字をキャッチしたい (80 未満の数字で十分です)。有効なローマ数字のみを正規表現と一致させるにはどうすればよいですか?で良いベースを見つけました。. 問題は、文字列全体を扱うことです。文字列内のローマ数字を検出する方法はまだ見つかりませんでした。必須のものはなく、すべてのグループがオプションである可能性があるためです。これまでのところ、次のようなことを試しました:
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
したがって、すべてのグループがオプションであるため、これも単語境界をそれ自体でキャプチャします。それを成し遂げる方法は?どちらが必須かを判断できないときに、これらの 2 つのグループのいずれかを必須にする方法は? ローマ人を捕まえるための他のアプローチも大歓迎です。