2011-06-22 9 views
5

Ruby正規表現に問題があります。Ruby RegexのANDの使い方

ルビーでAND(&)の正規表現はどうやってですか?

例:

cat and dog 
cat 
dog 

I just want to match "cat and dog" 

答えて

13

あなたが好きな何かをすると正のルック先読み

を使用することができます
(?=.*cat)(?=.*dog).* 

は、それがhere on Rubular更新リンクを参照してください!

この肯定的な先読み(?=.*cat)は、文字列のどこかに「cat」があるかどうかを確認し、(?=.*dog)を使用して「dog」に対して同じことが行われます。両方のアサーションが真である場合、完全な文字列は最後に.*と一致します。

利点は

だけでなく

猫と犬

が、それもマッチします、それはまた

犬と猫と一致するということです

あなたは完全一致が必要な場合は匹の

犬や猫

は、この

(?=.*\bcat\b)(?=.*\bdog\b).* 

\bを使用することはすなわち、それは単語と非単語の文字の間で一致し、単語の境界です。

here

0

を参照して、正規表現のデフォルトのアクション、即ち、第1マッチこの次にようにそれが続くとなります。

、マッチ「猫」は何が続いた後、「犬」が続くことを意味する

cat.*dog 

ようなものを使用し、猫と犬を一致させます。しかし、もう一度私はあなたの質問を誤解しているかもしれません...

0

それはあなたが望むものによって異なります。

あなたは、あなたの質問は非常に明確ではありません

cat.+dog 

それとも

cat.+dog|dog.+cat 

それとも

cat +and +dog 
2

ワイルドカードを使用することができます。あなたが(多分単語の一部として)「猫」「犬」の両方が含まれているだけでこれらの文字列と一致する場合

、あなたが行うことができます:

/^.*(cat.*dog|dog.*cat).*$/ 

上記の正規表現をします"連結dogma"にマッチしますが、 "連結"にはマッチしません。

あなたは「猫」と「犬」は、自分で単語として表示されませんようにしたい場合:

/^.*(\bcat\b.*\bdog\b|\bdog\b.*\bcat\b).*$/ 

上記の正規表現は、「猫と犬を」一致ではなく、「連結ドグマ」もしくはます"cat dogma"

出典:http://ruby-doc.org/docs/ProgrammingRuby/html/intro.html#S5

0

Regexp Sにはandオペレータが、それは意味がないという理由だけで、ありません。 は決してと一致します:どのようにStringが両方とも'cat''dog'となることがありますか?

+1

'schrodinger.pet.species.to_s' –

+0

もちろん、文字列は" cat "と" dog "の両方に同時に指定できます - 猫と犬は同じ文字列"である "。 – jeffdill2

関連する問題