이 숫자가 이 정규식과 일치하는 이유는 무엇입니까?

이 숫자가 이 정규식과 일치하는 이유는 무엇입니까?

정규식은 입니다 -?([0-9]|([1-9][0-9])).

번호 -2231가 일치합니다. 제가 이해한 바에 따르면 한 자릿수 또는 두 자릿수여야 합니다. 이 숫자가 이 정규식과 일치하는 이유는 무엇입니까?

답변1

정규식은 고정되어 있지 않으므로 처음 1개 또는 2개의 숫자를 자유롭게 일치시키고 "성공"하고 다음 숫자(성공)는 일치하지 않는 상태로 둡니다.

1자리 또는 2자리 숫자가 필요한 경우 정규식을 고정하세요.

'^-?([0-9]|([1-9][0-9]))$'

몇 가지 예:

$ seq -100 -99 | grep -E '^-?([0-9]|[1-9][0-9])$'
-99

$ seq 99 100 | grep -E '^-?([0-9]|[1-9][0-9])$'
99

$ seq -9 9  | grep -E '^-?([0-9]|[1-9][0-9])$'
-9
-8
-7
-6
-5
-4
-3
-2
-1
0
1
2
3
4
5
6
7
8
9

$ seq -2231 -100 | grep -E '^-?([0-9]|[1-9][0-9])$'
(empty)

답변2

정규식 패턴을 사용하는 대부분의 프로그램은 실제로찾다완전한 문자열이 아닌 패턴성냥. 파이썬은 독특하다search()그리고match()search()문자열의 match()시작 부분에서만 일치하는 메서드입니다 . 선택적으로 전체 문자열에 대한 일치를 요구할 grep수 있습니다 -x. 기본적으로 문자열의 어느 위치에서나 일치합니다. sed, Perl 과 같은 다른 것들은 awk문자열의 어디에서나 패턴을 찾을 것입니다. ^및 수정자("앵커")를 사용하여 $패턴을 각각 문자열의 시작 또는 끝으로 강제 적용합니다.

따라서 원하는 ERE 패턴은 다음과 같습니다.

^-?[1-9]?[0-9]$

관련 정보