programing

정규식 OR 연산자를 사용하여 두 조건 해결

bestprogram 2023. 5. 22. 21:52

정규식 OR 연산자를 사용하여 두 조건 해결

OR 연산자를 사용하여 정규식 두 개를 1로 결합하려고 합니다.|

한 글자가 일치하는지 확인하고 그 뒤에 8자리 숫자가 있는지 확인하는 것이 있습니다.

Regex.IsMatch(s, "^[A-Z]\d{8}$")


나는 단지 9자리 숫자를 확인하는 또 다른 것은 다음과 같습니다.

Regex.IsMatch(s, "^\d{9}$")


이제 다음을 수행하는 대신:

If Not Regex.IsMatch(s, "^[A-Z]\d{8}$") AndAlso
   Not Regex.IsMatch(s, "^\d{9}$") Then 
    ...
End If


저는 간단하게 할 수 있다고 생각했습니다.

If Not Regex.IsMatch(s, "^[A-Z]\d{8}|\d{9}$") Then
    ...
End If


분명히 나는 두 가지를 정확하게 조합하지 못하고 있고 규칙적인 표현을 잘 못합니다.어떤 도움이라도 주시면 감사하겠습니다.

그리고 궁금해하시는 분들을 위해 2가지 조건과 정규식 이상을 결합하는 방법을 살펴보았는데 아직도 머리를 긁적이고 있습니다.

|연산자의 우선 순위가 높고 원래 정규식에서 먼저 적용됩니다.우선 순위를 명확히 하려면 두 정규식의 w/그룹화 괄호를 결합해야 합니다.다음과 같이:

"^(([A-Z]\d{8})|(\d{9}))$"

를 사용하는 것은 어떻습니까?^[A-Z0-9]\d{8}$?

조건을 그룹화하고 싶은 것 같습니다.

Regex.IsMatch(s, "^(([A-Z]\d{8})|(\d{9}))$")

^과 $는 줄의 시작과 끝을 나타내므로 또는 조건으로 간주하지 않습니다.부모님은 "이 부모님의 모든 것" 또는 "이 다른 부모님의 모든 것"에 대해 명시적으로 말할 수 있도록 해줍니다.

@MikeC의 제품은 최고인 것 같습니다.

^[A-Z0-9]\d{8}$

...하지만 당신의 표현이 당신이 기대하는 것처럼 작동하지 않는 이유에 대해 당신은 이해해야 합니다.|"또는" 또는 "대체" 연산자는 매우 높은 우선 순위를 가지고 있습니다. 유일하게 더 높은 연산자는 그룹화 구성이라고 생각합니다.예제를 사용하는 경우:

^[A-Z]\d{8}|\d{9}$

...기본적으로 "문자열의 시작, 대문자, 8자리 일치" 또는 "문자열의 시작, 8자리 일치" 또는 "문자열의 끝, 8자리 일치" 또는 "문자열의 끝, 9자리 일치"를 의미하는 경우 다음 중 하나를 사용합니다.

^([A-Z]\d{8}|\d{9})$
^[A-Z]\d{8}$|^\d{9}$

이것이 당신의 이해에 도움이 되기를 바랍니다.

내가 찾은 것은OR연산자도 가끔 약간 이상합니다. 제가 하는 일은 그룹을 사용하여 일치시킬 섹션을 표시하기 때문에 정규식은 다음과 같습니다.^(([A-Z]\d{8})|(\d{9}))$

언급URL : https://stackoverflow.com/questions/10094534/using-regex-or-operator-to-solve-2-conditions