-1

以下に一致する正規表現が必要です。

文字列: "Hello #world it is #party time#"
一致: "world"、および "party time"

正規表現で遊んでいる間、どちらか一方しか一致できず、両方は一致しません。これは可能ですか?

4

1 に答える 1

1

現在のセットアップ方法では、これに対する解決策はありません。# を「ストップ ギャップ」として使用することと、間隔をあけない単語と間隔を空ける単語の両方に一致させたい場合には、あいまいさがあります。問題はスペースです..値に応じて、有効な文字と無効な文字の両方であり、どちらがどちらであるかを判断する方法は他にありません。

複数の正規表現に分解することはできません。最初にそのようにしようとすると、#([^#]+)と が一致#world#partyます。代わりに最初に実行しようとすると、#([^#]+)#一致しworld it isます。ミックスに否定的な後読みを投げても、#((?:(?<!\b).)+)#一致しますworld it is #party time

これを解決するには、次のいずれかを行う必要があります

  1. # 終了デリミタ (「ストップ ギャップ」と呼ぶ場合) をすべてのフレーズの最後に付けます。1 つの単語であっても同様です。それからあなたはすることができます#([^#]+)#
  2. フレーズ内のスペースを別のもの (アンダースコアなど) に変更します。次に、行うことができます#([^\b]+)(これは、スペースを交換するものによって異なる場合があります)
于 2013-05-07T23:46:41.883 に答える