문자열의 정확한 일치를위한 정규식


153

정규식으로 두 암호를 일치시키고 싶습니다. 예를 들어 두 개의 입력 "123456"과 "1234567"이 있으면 결과가 일치하지 않아야합니다 (거짓). 그리고 "123456"과 "123456"을 입력하면 결과가 일치해야합니다 (true).

나는 표현을 할 수 없었다. 어떻게합니까?


9
이 경우 왜 정규 표현식을 원하십니까? (정확한) 평등을 확인하는 것은 실제로 정규 표현식없이 수행해야합니다.
Bart Kiers

우리는 Bash 스크립트에서 텍스트를 바꾸는 방법을 찾고 Perl 및 regex와 관련된 답변을 얻습니다.
sudo

같은 문제를 가진 더 나은 해결책 ^ (123456)은 원하는 결과를 줄 것입니다
sdx11


@canbax 왜 이것이 재미있는 질문일까요?
밀라노 Velebit

답변:


177

변수에 입력 암호가 있고 정확히 123456을 일치 시키려면 앵커가 도움이 될 것입니다.

/^123456$/

펄에서 암호와 일치하는 테스트는 다음과 같습니다.

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

편집하다:

bart kiers 는 tho입니다. 왜 strcmp ()를 사용하지 않습니까? 모든 언어에는 고유 한 방식이 있습니다

두 번째로 더 안전한 인증 메커니즘을 고려할 수 있습니다. :)


앵커 주셔서 감사합니다, 나는 그것을 완전히 생각하지 않았다 :)
vikingsteve

2
중요 : Perl 및 PCRE에서는 \z대신에 원합니다 $. /^123456$/모두 일치 123456하고 123456그 뒤에 줄 바꿈이있는 반면 /^123456\z/에만 일치합니다 123456.
ikegami

154

malfaux의 대답에서 '^''$' 는 텍스트의 시작과 끝을 감지하는 데 사용되었습니다.
이들은 일반적으로 줄의 시작과 끝을 감지하는 데 사용됩니다.
그러나이 경우 올바른 방법 일 수 있습니다.
그러나 정확한 단어를 찾으려면 '\ b' 를 사용하는 것이 더 우아한 방법입니다 . 이 경우 다음 패턴은 정확한 문구 '123456'과 일치합니다.

/ \ b123456 \ b /


그런 식으로 작동합니까? ;) 이와 같은 정규식 테스터를 사용 하십시오 . "Show match"버튼을 사용하면 왜 일치하는지 확인할 수 있습니다. BTW 기억 '.' 특별한 숯이며 탈출하기에 좋습니다. (투표하기 전에 두 번 생각하는 것이 좋습니다 : D).
prageeth

2
내 답변이 오해의 소지가 있거나 잘못되었다고 생각하는 경우에도 (다른 사람처럼) 자신의 답변을 게시하거나 내 게시물 아래에 제안을 설명하는 댓글을 달 수 있습니다.
prageeth

26
당신의 대답은 오도되어 많은 사람들에게 심각한 문제를 일으킬 것입니다. 예, 당신의 접근 방식을 사용하여 \ bhttp : //www.foo.com \ b를 일치 http://www.bar.com/?http://www.foo.com을 로, 가장 확실히 정확히 일치하지 않은, OP에서 요청했습니다. 이로 인해 단어가 아닌 문자가 포함 된 URL 또는 암호를 사용하는 사람들 (다시 OP가 요청한 것)에 심각한 문제가 발생할 수 있습니다. 다른 사람들이 길을 잃지 않도록 답을 분명히해야합니다.
0x1mason

2
설명해야합니다. '.' 붉은 청어입니다. \ bhttp : // www \ .foo \ .com \ b는 여전히 http://www.bar.com/?http://www.foo.com 과 일치합니다 . 그것은 OP가 원하는 것이 아닙니다.
0x1mason

1
@ 0x1mason은 URL과 함께 \bhttp:\/\/www.foo.com\b일치 하는 것이 정확합니다 http://www.foo.com=?http://www.foo.com. ^(시작) 및 $(종료)를 사용하는 첫 번째 응답 은 다음 테스터를 통한 최상의 방법입니다. regex101.comregexr.com (아래 링크에 포함 된 테스터는 사용자에게 친숙하지 않으므로 훨씬 좋습니다)
twknab

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

이렇게하면 일치 항목 앞에 일부 문자, 숫자 또는 밑줄이 표시되지 않고 바로 문자 또는 숫자 또는 밑줄이 표시되지 않습니다

"abc", "abc.", "abc"의 "abc"와 일치하지만 "4abc"또는 "abcde"와는 일치하지 않습니다.


1
질문의 제목이 잘못되었습니다. 그는 두 개의 전체 줄 이 정확히 같은지 확인하려고합니다 . 또한 \w문자뿐만 아니라 숫자도 일치하므로 [\w\d]중복됩니다.
Alan Moore

좋은. "fiddle"에 대해서는 regextester.com/?fam=113232 를 참조하십시오. 시도해 보았습니다
동기화되지 않은

패턴 주위에 ()가 도움이되었습니다.
가잘

6

보다 직접적인 방법은 평등을 확인하는 것입니다

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

그러나 정규식을 고수하고 싶다면

string1 =~ /^123456$/

@ Kurumi txt 파일에서 특정 단어를 검색하는 Java 코드를 만들려고하는데 regx를 사용하고 싶습니다 ./^myword$/ 패턴을 String.match (/ ^ myword $ /) 사용하여 검색 할 수 있습니다 그 txt에 단어?
Antwan

3

키워드의 시작과 끝에 공백을 추가 할 수도 있습니다 : /\s+123456\s+/i.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.