このブログの更新は X(旧Twitter)アカウント @m_hiyama で通知されます。
Follow @m_hiyama

ご連絡は上記 X アカウントに DM にてお願いします。

参照用 記事

バッグ正規表現の事例

列(リスト)正規表現は既によく知られたものです。セット正規表現の応用例は、次の記事で述べています。

ここでは、バッグ(マルチセット)正規表現の例を挙げておきましょう。

XHTMLのheadの内容を単純化して、title, meta, linkだけに限定すると:

  1. titleは1回だけ必ず出現する。
  2. metaとlinkは何回(0回でも)出現してもよい。
  3. title, meta, linkの出現順序はどうでもよい。

となるでしょう。この内容モデルは、通常の列正規表現により ((meta|link)*, title, (meta|link)*) と書くこともできますが、「出現順序はどうでもよい」なら、列(リスト)ではなくてバッグと考えれば、(title, link*, meta*)という単純な正規表現でOK。記号「,」だと順序があるように思えるなら、(title & link* & meta*)とでもすればいいでしょう(実はこの記法、SGMLへの先祖返り)。

DublinCoreメタデータ項目の出現パターンなども、列よりはバッグと考えたほうが自然です。

(続く)