web-dev-qa-db-ja.com

AND/OR演算子は正規表現のようにどのように表されますか?

私は現在、ユーザーがWordを正しく入力したかどうかを確認する語彙アルゴリズムをプログラミングしています。私は次のような状況にあります。Wordの正しい解決策は "part1、part2"です。ユーザーは "part1"(回答1)、 "part2"(回答2)、または "part1、part2"(回答3)のいずれかを入力できるはずです。私は今、ユーザーによって与えられた文字列を次の、自動的に作成された、正規表現と一致させようとします:

^(part1|part2)$

これは答え1と2だけを正しいものとして返しますが、答え3は間違っています。私は今、|に似た演算子があるかどうか疑問に思います。 and/orの代わりにeither...orと表示されます。

誰かが私がこの問題を解決するのを手伝ってくれる?

176
Jonathan

Part1とpart2以外の単語を含むように動的に正規表現を作成したいと思いますが、順序は関係ないようにします。もしそうなら、あなたはこのようなものを使用することができます:

((^|, )(part1|part2|part3))+$

ポジティブマッチ:

part1
part2, part1
part1, part2, part3

否定的な一致:

part1,           //with and without trailing spaces.
part3, part2, 
otherpart1
231
Mithon
'^(part1|part2|part1,part2)$'

それは動作しますか?

22
Kent

これは変更なしに機能しますか?

^((part)1(, \22)?)?(part2)?$

それともどうして?

^((part)1(, (\22))?)?(\4)?$

最初のものはpart2以外のすべての条件に有効です(GNU sed 4.1.5を使用)。

5
potong

正規表現の専門家ではありませんが、あなたは^((part1|part2)|(part1, part2))$をすることができます。言葉で言うと、「パート1、パート2、またはその両方」

3
BlackBear

またはこれを使用することができます:

^(?:part[12]|(part)1,\12)$
2
FailedDev