文字列の完全一致の正規表現


153

2つのパスワードを正規表現で照合したい。たとえば、「123456」と「1234567」の2つの入力がある場合、結果は一致しません(false)。そして、「123456」と「123456」を入力すると、結果は一致(true)になります。

表現できませんでした。どうすればいいのですか?


9
この場合、なぜ正規表現が必要ですか?(正確な)等価性のチェックは、正規表現なしで実際に行われるべきです。
Bart Kiers、

Bashスクリプトのテキストを置き換える方法を調べ、Perlとregexを含む回答を得るからです。
sudo

同じ問題があるより良い解決策^(123456)はあなたが望む結果を与えます
sdx11


@canbaxなぜこれがまさに面白い質問なのでしょうか?
ミラノヴェレビット

回答:


177

変数に入力パスワードがあり、正確に123456に一致させたい場合は、アンカーが役立ちます。

/^123456$/

perlでは、パスワードを照合するためのテストは次のようになります

print "MATCH_OK" if ($input_pass=~/^123456$/);

編集:

バート・キアーズ正解ですが、これにstrcmp()を使用してみませんか?すべての言語は独自の方法でそれを持っています

もう1つ考えられるのは、より安全な認証メカニズムを検討することです。


アンカーのおかげで、私はそれを知っていたが、それについて完全には考えていなかった:)
vikingsteve

2
重要:PerlとPCREでは、\zではなくが必要です$/^123456$/両方に一致し123456123456その後に改行が続きますが、/^123456\z/のみに一致し123456ます。
池上

154

マルフォーの回答では、「^」「$」を使用して、テキストの最初と最後を検出しています。
これらは通常、行の最初と最後を検出するために使用されます。
ただし、この場合はこれが正しい方法です。
ただし、完全に一致する単語を検索する場合は、より洗練された方法として'\ b'を使用します。この場合、次のパターンは「123456」というフレーズと完全に一致します。

/ \ b123456 \ b /


それがそのように機能することを確信していますか?;)このような正規表現テスターを使用してください。「一致を表示」ボタンを使用すると、一致する理由が表示されます。ところで、「。」を覚えておいてください。特別なcharであり、それをエスケープするのに適しています。(そして、反対票を投じる前によく考えてください:D)。
prageeth 2013

2
私の回答が誤解を招く、または間違っていると思われる場合でも、(他の人がするように)自分の回答を投稿したり、私の投稿の下に提案を説明するコメントを追加したりできます。
2014年

26
あなたの答えは誤解を招きやすく、多くの人々に深刻な問題を引き起こします。例えば、あなたのアプローチを使用して\ bhttp://www.foo.com \ bが一致するhttp://www.bar.com/?http://www.foo.comを通り、ほとんど間違いなく完全に一致していません、 OPで要求されます。これは、単語以外の文字を含むURLまたはパスワード(これもOPが要求したもの)を扱う人々に深刻な問題を引き起こします。他の人が迷うことがないように、答えを明確にする必要があります。
0x1mason 2014年

2
あなたは説明しなければならないでしょう。「」赤いニシンです。\ bhttp:// www \ .foo \ .com \ bは、引き続きhttp://www.bar.com/?http://www.foo.comに一致します。それはOPが望んでいることではありません。
0x1mason 2014年

1
@ 0x1masonは正しいです\bhttp:\/\/www.foo.com\bhttp://www.foo.com=?http://www.foo.com、URLとそのまま一致します。使用して最初の応答、^(開始)と$:(終わり)は、これらのテスターを経由して最良の方法であるregex101.comregexr.com (下記のリンクに含まテスターが、これらは非常に優れている、非常にユーザーフレンドリーではありません)
twknab

34
(?<![\w\d])abc(?![\w\d])

これにより、一致の前に文字、数字、アンダースコアがなく、直後に文字、数字、アンダースコアが続くことがなくなります。

したがって、「abc」、「abc。」、「abc」の「abc」と一致しますが、「4abc」、「abcde」とは一致しません。


1
質問のタイトルは誤解を招くものです。彼は2つの文字列全体が完全に同じであることを確認しようとしています。また、\w数字だけでなく文字も一致するため[\w\d]、冗長です。
アランムーア

いいね。参照regextester.com/?fam=113232を「フィドル」のために私はそれを試してみました
非同期の

()周りのパターンは私を助けました。
Ghazal

6

より簡単な方法は、等しいかどうかを確認することです

if string1 == string2
  puts "match"
else
  puts "not match"
end

ただし、正規表現に固執したい場合は、

string1 =~ /^123456$/

@Kurumi txtファイル内の特定の単語を検索するJavaコードを作成しようとしています。regxを使用したいので、そのパターン/ ^ myword $ /をString.match(/ ^ myword $ /)で使用して、そのtxtの単語?
Antwan 2014年

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.