正規表現のORパターンの並び順
- 題名: 正規表現のORパターンの並び順
- 著者: ムーミン
- 日時: 2012/05/11 16:07:11
- ID: 30431
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: 正規表現のORパターンの並び順
- 著者: Hongliang
- 日時: 2012/05/11 16:36:43
- ID: 30432
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: 正規表現のORパターンの並び順
- 著者: ムーミン
- 日時: 2012/05/12 8:28:56
- ID: 30433
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
VB2008/2010で正規表現を使ってテキスト処理を行っているのですが、例えば、
(Imports System.Text.RegularExpressionsの前提で)
Dim txt As String = "今日は給料日なので給料を下ろしてこよう"
Dim ptn As String = "給料|給料日"
Dim ms as MatchCollection = Regex.Matches(txt, ptn)
とした場合、最初にマッチする文字は"給料日"となることを期待していたのですが、そうではなく、"給料"となり、"日"の部分をマッチしてくれません。
また、パターン文字列を
Dim ptn As String = "給料日|給料"
とすると、最初にマッチする文字は期待通りに"給料日"となります。
このことから、パイプ(|)を使ったORパターンの場合、マッチ結果がパターンの並び順によって変わるのですが、これは正規表現として正しい動きなのでしょうか?
実は、プログラム上でいくつかのキーワードをパイプ結合してパターン文字を生成し、文字検索を行っているのですが、この例では"給料日"が最初にマッチしてほしいにもかかわらず"給料"でマッチしてしまい、"給料日"の検索が抜けてしまうことが問題となっております。
このため、パイプ(|)を使ったORパターンを生成する場合、並び順を考慮することによって解決するものなのかどうかを確認したく、質問させて頂きました。
なお、パターン文字列はプログラムで行うので、"給料日?"のようなパターンを自動で作成することは面倒そうなので考えていません。
よろしくお願いします。