CATツールで使える正規表現・第2回
この連載では、翻訳の現場で役に立つ正規表現を取り上げながら、memoQやSDL Trados StudioのようなCATツール※で利用できる正規表現について解説しています。※ CATツールとは、翻訳支援(Computer Assisted Translation)ツールの略称で、翻訳メモリや用語集を使って翻訳業務を効率化するためのツールを指します。
前回の記事では、HTMLタグを検索するために、任意の1文字を表す「.」と1回以上の繰り返しを表す「+」を使って<.+?>という正規表現を作りました。しかし、この正規表現は、HTMLタグでない文字列にもヒットしてしまいます。今回の記事では、この正規表現を改善してみましょう。
目次[非表示]
- 1.あるかないか「?」
- 2.あれかこれか「|」
- 3.本当にいくつでも「*」
- 4.「.」に注意
- 5.今回のまとめと次回の予告
- 6.川村インターナショナルの翻訳サービス
あるかないか「?」
HTMLタグには開始タグと終了タグがあり、たとえばp要素なら、開始タグが「<p>」、終了タグが「</p>」となります。つまり、「<」のあとは、「/」があるかもしれないし、ないかもしれない、言い換えると「/」が0回または1回繰り返します。この「0回または1回の繰り返し」は、メタ文字「?」で表すことができます。
前回の記事で用いた「+?」のように、「?」の直前が繰り返しの回数を表す「量指定子(quantifier)」の場合、「?」は最長一致を最短一致に変えます。それ以外の場合、「?」自身が量指定子となり、その直前の文字(またはグループ)の0回または1回の繰り返しを表します。
したがって、</?とすれば、「<」のあとに「/」があるかもしれないしないかもしれない文字列、つまり「<」または「</」にマッチします。
あれかこれか「|」
そのあとは要素名が続きますが、まずは話を簡単にするために、「a」「em」「strong」の3種のHTML要素のタグのみを検索したいとします。すると、</?のあとに「aまたはemまたはstrong」を表す正規表現を続けることになります。
この「または」を表すメタ文字が「|」です。つまり、a|em|strongという正規表現が「a」または「em」または「strong」を表します。そこで、</?(a|em|strong)>という正規表現で「</a>」や「<em>」などを検索できます。
なお、「( )」は、ご想像の通り、正規表現を一まとめにグループ化するものです。「( )」をつけずに</?a|em|strong>とすると、</?aまたはemまたはstrong>で検索することになってしまいます。
実は「( )」にはもう1つ重要な機能があるのですが、それは次回以降の記事で紹介します。
本当にいくつでも「*」
さて、</?(a|em|strong)>は「<a>」にはマッチしますが「<a href=”index.html”>」にはマッチしません。「<a」と「>」の間にいろいろな文字がはさまっているパターンも検索できるようにしましょう。
前回の記事と同様に「いろいろな文字」を「.」で表すとして、今回は「+」は使えません。「+」は1回以上の繰り返しですが、今回は任意の文字が0文字かもしれないからです。そんなときは、0回以上の繰り返しを表す「*」を使います。
前回の記事で見たように、ゴー+ルは「ゴール」「ゴーール」「ゴーーール」などにマッチしますが、ゴー*ルとすると、それらに加えて「ゴル」にもマッチします。
「*」も、「+」と同様、貪欲です。怠惰にするには「?」を続けます。そこで、</?(a|em|strong).*?>という正規表現が、a要素またはem要素またはstrong要素の開始タグまたは終了タグにマッチします。
「.」に注意
ところが、この正規表現は、3種のHTML要素のタグには確かにマッチするのですが、別のHTML要素、たとえばaddress要素のタグにもマッチしてしまいます。「<address>」も、「<a」で始まり、いろいろな文字が0文字以上あって、「>」で終わるからです。
このように、任意の1文字「.」が思いがけない文字にマッチして、想定外の検索結果が得られることがあります。これを防ぐには、安易に「.」に頼らずに、パターンをできるだけ絞り込むとよいでしょう。「.」自身を検索するときは\.とすることを忘れないでください。
では、先ほどの正規表現を修正してみましょう。
HTMLタグをよく見ると、要素名の後は、すぐに「>」でタグが終了するか、スペースがあっていろいろな文字があって「>」で終了するかのどちらかです。言い換えると、要素名の後に、「スペース文字+任意の文字列」があったりなかったりして、「>」で終わります。
したがって、a要素またはem要素またはstrong要素の開始タグまたは終了タグにマッチする正規表現は</?(a|em|strong)( .*?)?>となります。「.*?」の直前に半角スペースがあることに注意してください。
今回のまとめと次回の予告
今回は、0回または1回の繰り返しを表す「?」、0回以上の繰り返しを表す「*」、「または」を表す「|」を使って、a要素またはem要素またはstrong要素の開始タグまたは終了タグにマッチする正規表現を作りました。
実際には、検索するHTML要素の数は3種よりずっと多いでしょうが、それでも数に限りがあります。そこで、要素名を「|」を使って並べていけば、特定のHTMLタグにマッチする正規表現を作ることができます。
そうはいっても、多数のHTML要素名を並べるのは大変ですし、要素名が大文字で書かれることもあります。次回は別の方法でHTMLタグを検索してみましょう。
前回の記事と本記事の続きはこちら
|
川村インターナショナルの翻訳サービス
川村インターナショナルでは、AIやMTの活用、プロセスの自動化やデジタル化による翻訳業務効率化ソリューションをご提案します。翻訳支援ツールの導入を検討している、自社の翻訳資産を活用して機械翻訳エンジンをカスタマイズしたい、など翻訳業務の効率化をご検討中の方は、ぜひお気軽にお問い合わせください。
また、CATツールで使える正規表現のほか、川村インターナショナルでは業務効率化に役立つ「ツール・業務効率化」関連のブログ記事を公開しています。
翻訳を効率的に行うためのCATツールの解説や、日常業務に欠かせないWindowsやMicrosoft Officeアプリの意外と知られていない小ワザなど、関連記事のうちアクセス数の多い上位10記事をまとめました。
関連記事