문제

이번에는 쉬운 질문입니다.

문자열에 정규 표현식을 사용하여 문자가 포함되어 있지 않은지 여부를 테스트하려고합니다. 나는 그 표현이 형식이라고 생각했다 [^엑스] 어디 엑스 당신이 나타나고 싶지 않은 캐릭터이지만 작동하지 않는 것 같습니다.

예를 들어,

Regex.IsMatch("103","[^0]")

그리고

Regex.IsMatch("103&","[^&]")

둘 다 진실을 반환합니다 (거짓을 기대합니다).

나는 사용을 시작했다 "[^&]" 그리고 아마도 &로 탈출해야한다고 생각했지만 차이를 만들지 않은 것 같습니다.

아이디어? 나는 그것이 작은 것이라고 생각합니다.

또한 .NET을 사용하고 있으므로 명심하십시오.

edit1 :

나는 찾았다 이것, 그러나 그것은 내가 가진 문제에 대한 대답하지 않는 것 같습니다.

edit2 :

나는 응답하고 싶었다 케빈 그리고 조엘의 제안. 이러한 제안은 실제로 더 빠르지만이 경우에 필요한 유연성을 달성하지 못하므로 검색을 통해이 질문을 발견하면 답변이 귀하의 요구에 맞는지 확실히 살펴보십시오. 내 경우에는 정규 표현식이 각 행을 루프하고 특정 열의 해당 행의 내용이 전달되는 정규식과 일치하는지 확인하는 데이터 가능한 검증 방법으로 전달됩니다. 검증 된 다른 여러 데이터블의 경우 다음을 원했습니다.

  1. Regex를 사용하여 가장 광범위한 검증 범위를 활성화하고
  2. 항상 긍정적 인 일치를 찾으십시오 (예 :! regex.ismatch (셀, regexvariable)를 사용하는 대신, 나는 항상 regex.ismatch (셀, regexvariable)를 사용할 수있는 데 의존하고 싶었습니다. 음수 대신 양의 일치.

잘만되면 그것은 도움이됩니다.

도움이 되었습니까?

해결책

솔루션은 반쯤 맞습니다. 당신이 보는 경기는 다른 캐릭터를위한 것입니다. 당신이 말하고 싶은 것은 "이봐! 나는 전체 문자열 에서이 캐릭터를보고 싶지 않습니다"와 같은 것입니다.

이 경우 :

Regex.IsMatch("103","^[^0]*$")

다른 팁

패턴 [^0]은 0이 아닌 모든 문자와 일치합니다. 두 예 모두에서 패턴은 첫 번째 문자 ( "1")와 일치합니다. 전체 문자열에 0이 포함되어 있는지 테스트하려면 패턴이 "^[^0]*$"여야합니다. 문자열의 시작 부분에서 시작하여 0이 아닌 임의의 문자 수와 일치하며 즉시 문자열의 끝이 끝납니다. 0이 포함 된 문자열은 실패합니다. 0이없는 문자열은 통과합니다.

문자열로 단일 캐릭터를 찾고 있다면 Regex는 약간의 과잉처럼 보입니다. .indexof 또는 .crantains를 사용하지 않는 이유는 무엇입니까?

파서가 도달하는 첫 번째 캐릭터는 "1"이며 [^0]에게도 적용되고 [^&]에도 참이므로 두 예제 모두에서 참으로 반환됩니다.

당신은 당신의 부정을 잘못된 장소에두고 있습니다. [^x] X가 아닌 것과 일치합니다. X가 문자열에 있으면 다른 문자가 있으면 문자열이 여전히 표현식과 일치합니다. 대신 X가 있으면 true를 일치시키고 기능의 결과를 무효화하려고합니다.

Not Regex.IsMatch("103", "0")

Not Regex.IsMatch("103&", "&")

이 간단한 예제에서는 정상 문자열. indexof () 또는 string.contains ()가 더 나은 선택이 될 것입니다.

나는이 질문을 발견했지만 똑같은 것을 찾지 만 JavaScript를 위해왔다. 위의 표현은 제 경우에는 효과가 없었지만 아래의 표현을 발견했습니다. (JavaScript 솔루션을 찾는 다른 사람이 여기서 끝납니다.)

^((?!0).)*$

이 구성은 a라고합니다 부정적인 전망

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top