(\w+)?
과 (\w*)
사이에 정규 표현식의 차이점이 있습니까? 제가 누락 된 것이 있는지 이해할 수 없습니다. 두 코드를 다른 코드로 사용했지만 똑같은 것을하는 것처럼 보입니다. 기본적으로 동일합니다. 맞습니까?( w +)입니까? 와 ( w *) 동일합니까?
1
A
답변
7
는
(\w+)?
및(\w*)
사이에 차이없습니다. 둘 다\w
의 0 번 이상 일치합니다. 이것은 Perl의 Regexp-Compare 모듈을 사용하여 테스트를 수행하여 테스트 할 수도 있습니다. 예상 결과가 나옵니다. 캡처 그룹의 측면에서- 는 큰 차이있다.
- 는
(\w+)?
의 경우 실패하면 캡처 그룹이 초기화되지 않습니다. (\w*)
의 경우 초기화되지만 비어있게됩니다. 따라서 Perl에서 "!"=~/(\w+)?/; print $1;
은 정의되지 않은 $ 1에 대한 경고를 반환하고 "!"=~/(\w*)/; print $1;
은 빈 문자열입니다. 성능의 측면에서 (\w*)
이어야합니다 약간 정규 표현식 엔진이 할 따라서 선호하는 것으로 단계의 수의 측면에서 더 나은. 이것은 물론 엔진에 달려 있습니다. 그러나 (\w*)
을 사용하면 엔진은 (\w+)?
과 비교하여 백 트랙킹을 수행 할 필요가 없습니다. 예를 들어 Perl에서 use re 'debug'
지시문을 사용하고 두 정규 표현식을 빈 문자열과 비교했습니다. 당신은 그들 각각의 단계를 비교할 수 있습니다
""=~/(\w+)?/
Matching REx "(\w+)?" against ""
0 <> <> | 1:CURLYX[0] {0,1}(10)
0 <> <> | 9: WHILEM(0)
whilem: matched 0 out of 0..1
0 <> <> | 3: OPEN1(5)
0 <> <> | 5: PLUS(7)
ALNUM can match 0 times out of 2147483647...
failed...
whilem: failed, trying continuation...
0 <> <> | 10: NOTHING(11)
0 <> <> | 11: END(0)
Match successful!
""=~/(\w*)/
Matching REx "(\w*)" against ""
0 <> <> | 1:OPEN1(3)
0 <> <> | 3:STAR(5)
ALNUM can match 0 times out of 2147483647...
0 <> <> | 5: CLOSE1(7)
0 <> <> | 7: END(0)
Match successful!
PS합니다. 펄에 있지 않다면 RegexBuddy으로 정규 표현식을 디버깅하는 것이 가능하다고 생각합니다. (필자는 한번도 시도한 적이 없지만 많이 들었습니다.)
+0
결론 :'(\ w *)? '이 아니라'(\ w *)'를 사용하십시오! – psxls
2
관련 문제
- 1. 정규식 차이 : (\ w +)? 와 (\ w *)
- 2. 정규식 -/\ w \ b \ w/
- 3. 전자 메일 검증 식 \ w + ([- +. '] \ w +) * @ w + ([-.] \ w +) * \. \ w + ([-.] \ w +) * 공백 허용
- 4. REGEXP_EXTRACT (단어, r '(\ w \ w \'\ w \ w) ')의 r의 의미는 무엇입니까
- 5. /^ \ w + $ /와 (과) 일치하는 문자열을 어떻게 호출합니까?
- 6. w/ocamlbuild w/ocamlbuild에서 OCaml 프로그램 컴파일하기
- 7. 분할 ("\\ W") 및 분할의 차이는 무엇인가 ("[^"\\ w] ")
- 8. ^[A-Za-z] (\ W | \ w) * 정규식?
- 9. RegEx : \ w - "_"+ "-"UTF-8
- 10. w : r/w : t 안에있는 모든 w : body/w : p 안에 xslt 2.0을 사용하여 쿼리하는 방법? 이건 내 XML 파일입니다
- 11. 클로저를 사용하여 L = {w | #a (w) = # b (w) = # c (w)}가 컨텍스트 프리가 아닌 것을 증명하는 방법
- 12. 자바 스크립트 파일의 첫 줄은 var w = w ||입니다. {};
- 13. W, w, P, p를 제외한 문자를 검사하는 PHP 정규식
- 14. W 휘발성 변수와 원자 변수의 차이점은 무엇입니까?
- 15. Select ID w/jQuery
- 16. ProDinner w/area 사용하기
- 17. w/window.location.hash와 관련된 문제
- 18. 정규화 h/w
- 19. Reference Textarea W/Input
- 20. W 8.1 로딩 BitmapImage
- 21. 제한/w CKEditor/JQuery와
- 22. w 출력을 파일로 리디렉션
- 23. SmartWatch h/w schematic
- 24. 오류 W/PROC GEOCODE
- 25. "$ -w = true"는 무엇을합니까?
- 26. 자바 전체 단어 w
- 27. 루비 : 다차원 % w 배열?
- 28. Sinatra/w 얇음 : 로깅?
- 29. OpenGL 3.2 w/NSOpenGLView
- 30. 브라우저에서 Ctrl + W 캡처하기
가능한 중복 [정규식 : 더하기 기호 대 별표] (http://stackoverflow.com/questions/18364673/regex-plus-sign-vs-asterisk) – PeeHaa