2010-04-16 2 views
12

$ 경기에도 일치하는 문자열에 \n 후행 여분이있다, 그래서 우리는언제 정규식에서 A를 사용해야합니까? 라인 앵커의

^\w+$abcd\n하지만 ^\w+\Z

어떻게하지 않은 문자열과 일치하는 것이다 예를 들어 대신 $

\Z를 사용 약 \A 및 언제 사용합니까?

+0

'^ \ w + \ z' (소문자 z)를 의미하지 않습니까? '\ Z'와'$'는 ('/ m' 수식자를 사용하지 않을 때와) 동일합니다. – cjm

+0

@cjm, 파이썬에서 테스트 한 결과, IMHO는 '^ \ w + \ Z'가'abcd \ n'과 일치하지 않지만 $는 맞지만 파이썬과 펄 정규 표현식에서'\ Z '는 다르지만, 파이썬'\ Z'와'\ z'는 같고 (파이썬 문서에서'\ z'가 보이지 않기 때문에) 생각합니다. 나는 현재 펄을 가지고 있지 않습니다. – YOU

+0

@cjm, 나는 codepad.org에서 테스트했다. 예, 파이썬에서'\ Z'는 펄에서'\ z'를 의미하며, 두 언어 모두에서 같다고 생각했습니다. – YOU

답변

20

대부분의 경우 여러 줄 일치를 사용할 때 사용됩니다. \A은 전체 텍스트의 시작 부분에서만 일치하기 때문에 행 시작 부분과는 대조적으로 라인간에 일치 할 수있는 정규 표현식에서는 ^\A의 기능이 다릅니다.

+0

+1 감사합니다. 그러나 사람들은 실제로 그것을 사용하고 있습니까? '/ m'을 제거하지 않고'^'를 사용하는 것은 같은 행동입니까? – YOU

+0

예, 사용합니다. 새 줄을 삽입하지 않을 것으로 예상되는 문자열을 검색하려고 시도하지만 사용자가 문자열을 넣으면됩니다. 전체 문자열을 검색 할 수 있지만^및 $을 혼동하여 문자열의 첫 번째 부분 만 검색 할 것으로 기대합니다 . 결국 악의적 인 코드를 쿼리에 삽입하거나 데이터베이스에 저장하게 될 수 있습니다. 그래, 혼란 스럽지만 \ m, \ A, \ z, ^, $는 그 용도가 있으므로 언제 어디에서 사용하는지 이해해야한다. 어쩌면 그것은 좋은 예가 아니지만 실제로 중요 할 수 있습니다. 어쩌면 누군가가 실제 사례를 추가 할 수 있습니다. –

+0

로그 집합 내의 로그 파일의 시작 부분에서 특정 줄 쌍을 일치 시키려면 여러 줄 일치를 사용하도록 설정해야하지만'^'(중간이 아닌 로그 파일의 시작 부분에서 줄을 일치시키기를 원하기 때문입니다. 잠재적 인 유스 케이스가 될 것입니다. – Amber

4

정규식 기능과 마찬가지로 더 일반적인 기능과는 대조적으로 필요한 항목을 정확하게 설명 할 때 사용합니다. 논리 행 대신 문자열의 시작 부분을 정확하게 일치 시키려면 해당 행을 설명하는 정규식 기능을 사용하십시오. 당신이 원하지 않는 상황에서 일치 할 수있는 regex 기능을 사용하지 마십시오. (루비)를 사용한 태그에 따라 질문에

\b Match a word boundary 
\B Match except at a word boundary 
\A Match only at beginning of string 
\Z Match only at end of string, or before newline at the end 
\z Match only at end of string 
\G Match only at pos() (e.g. at the end-of-match position 
    of prior m//g) 
2

직접 관련 없음, 그러나 적어도 하나 개의 언어가있다 : 펄 들어

은 제로 폭 주장에 대한 자세한 내용은 perlre 문서를 참조 ^$항상 당신이 \A\Z 또는 \z를 사용하여 시작/끝 문자열 당신 이 일치 싶다면,/끝 (end-of-line)을 시작을 의미 곳.

당신이 휴대하여 정규 표현식에를 유지하려면

, 그것은 명시 적으로 당신이 그들을 대신 등 \m 또는 Regex.MULTILINE 한편

, 자바 스크립트 같은 모드 수정의 가용성에 의존 수행 할 작업을 명시하는 것이 좋습니다입니다 , POSIX 및 XML은 \A\Z을 지원하지 않습니다. 여기서 RegexBuddy 같은 도구가 regexes를 한 가지 맛에서 다른 맛으로 변환하는 데 유용합니다.

+0

루비 정규식에 대한 정보를 보내 주셔서 감사합니다. +1 – YOU

2

정규식 맛이 \A을 지원하는 경우 항상 ^ 대신 사용하는 것이 좋습니다. \A은 항상 문자열의 시작 부분에서 해당 문자열을 지원하는 모든 유형에서만 일치합니다. 줄 바꿈에 문제는 없습니다.

^은 정규식 지정 및 정규식 옵션에 따라 문자열 시작 부분 또는 시작 부분에 일치 할 수 있습니다.

\A을 사용하면 다른 사람이 코드를 유지 관리해야하는 혼란을 줄일 수 있습니다.

+0

제안에 감사드립니다. Jan Goyvaerts, thats make sense – YOU

관련 문제