문자열에서 대문자가 연속적으로 발견되는지 확인하는 정규식?
다음 경우에 대한 정규식을 알고 싶습니다.
문자열에는 알파벳 문자 만 포함되어야합니다. 대문자로 시작하고 그 뒤에 소문자가 와야합니다. 그런 다음 소문자 또는 대문자가 될 수 있습니다.
^[A-Z][a-z][A-Za-z]*$
그러나 문자열에는 연속 된 대문자도 포함되지 않아야합니다. 해당 논리를 정규 표현식에 어떻게 추가합니까?
즉 HttpHandler
, 맞지만 HTTPHandler
틀 렸습니다.
편집 : 2015-10-26 : 찬성 해 주셔서 감사합니다. 그러나 특히 웹이나 더 많은 "국제"용으로 개발하는 경우 tchrist의 답변을 살펴보십시오 .
Oren Trutners 답변이 옳지 않습니다 (일치해야하지만 일치하지 않는 "RightHerE"의 샘플 입력 참조).
올바른 해결책은 다음과 같습니다.
(?!^.*[A-Z]{2,}.*$)^[A-Za-z]*$
편집하다:
(?!^.*[A-Z]{2,}.*$) // don't match the whole expression if there are two or more consecutive uppercase letters
^[A-Za-z]*$ // match uppercase and lowercase letters
/편집하다
솔루션의 핵심은 부정적인 전망입니다. http://www.regular-expressions.info/lookaround.html
때마다 하나 개의 쓰기 [A-Z]
나 [a-z]
, 처리 아무것도하지만 7 비트 ASCII 데이터를 하나의 커밋. 정말 괜찮다면 괜찮습니다. 그러나 그렇지 않은 경우 유니 코드 속성이 존재합니다.
유니 코드에는 두 가지가 아닌 세 가지 경우가 있습니다. 또한 대소 문자가없는 문자도 있습니다. 일반적으로 문자는 \pL
속성에 의해 지정되며 각 문자 는 5 개의 하위 범주 중 정확히 하나에 속합니다.
- 로 지정되는 대문자
\p{Lu}
; 예 :AÇDZÞΣSSὩΙST
- 로 지정되는 제목 케이스 문자
\p{Lt}
; 예 :LjDzSsᾨSt
(사실Ss
과St
대문자 다음 소문자 문자,하지만 그들이 있는 당신의 타이틀 케이스를 요청할 경우에 당신이 무엇을 얻을ß
및ſt
각각) - 로 지정되는 소문자
\p{Ll}
; 예 :aαçdzςσþßᾡſt
- 로 지정되는 수정 자 문자
\p{Lm}
; 예 :ʰʲᴴᴭʺˈˠᵠꜞ
- 로 지정된 다른 문자
\p{Lo}
; 예 :ƻאᎯᚦ京
당신은 할 수 같은 것이 있기 때문에, 이들의의 보수를 가지고,하지만 조심 \P{Lu}
않습니다 되지 대문자되지 않은 편지를 의미한다. 대문자가 아닌 모든 문자를 의미합니다.
대문자 또는 제목 중 하나 인 문자의 경우 [\p{Lu}\p{Lt}]
. 따라서 패턴에 사용할 수 있습니다.
^([\p{Lu}\p{Lt}]\p{Ll}+)+$
첫 번째 뒤에 오는 문자를 대소 문자 만 제한하지 않으려는 경우 다음을 선호 할 수 있습니다.
^([\p{Lu}\p{Lt}][\p{Ll}\p{Lm}\p{Lo}]+)+$
소위 "CamelCase"식별자를 일치시키려는 경우 실제 규칙은 프로그래밍 언어에 따라 다르지만 일반적으로 밑줄 문자와 십진수 ( \p{Nd}
)를 포함하고 리터럴 달러 기호를 포함 할 수 있습니다. 그렇다면 위의 두 문자 클래스 중 하나 또는 다른 하나에 이들 중 일부를 추가 할 수 있습니다. 예를 들어, 둘 다에 밑줄을 추가하고 초에는 숫자 만 추가 할 수 있습니다.
^([_\p{Lu}\p{Lt}][_\p{Nd}\p{Ll}\p{Lm}\p{Lo}]+)+$
하지만 다양한 RFC 및 ISO 표준의 특정 단어를 다루는 경우 이러한 단어는 종종 ASCII 만 포함하는 것으로 지정됩니다. 그렇다면 문자 그대로 [A-Z]
아이디어를 얻을 수 있습니다 . 실제로 존재하지 않는 경우 그러한 제한을 부과하는 것은 친절하지 않습니다.
^([A-Z][a-z]+)+$
이것은 하나 이상의 소문자가 뒤 따르는 대문자 시퀀스를 찾습니다. 연속 된 대문자는 한 번에 하나만 허용되므로 일치하지 않으며 그 뒤에 소문자가 와야합니다.
유니 코드에 관한 tchrists의 우수한 게시물을 제외하고는 부정적인 예측을 가진 복잡한 솔루션이 필요하지 않다고 생각합니다. 정의에는 대문자 다음에 적어도 하나의 그룹이 필요합니다 (소문자는 선택적으로 대문자로 이어짐) )
^
[A-Z] // Start with an uppercase Letter
( // A Group of:
[a-z] // mandatory lowercase letter
[A-Z]? // an optional Uppercase Letter at the end
// or in between lowercase letters
)+ // This group at least one time
$
좀 더 콤팩트하고 읽기 쉬운 것 같아요 ...
이 쿼리를 적용하는 것보다 적어도 하나의 대문자가있는 mysql에서 모든 직원 이름을 얻으려면.
SELECT * FROM registration WHERE `name` REGEXP BINARY '[A-Z]';
'Nice programing' 카테고리의 다른 글
SQL Server 2005 쿼리를 CSV로 내보내는 방법 (0) | 2020.11.22 |
---|---|
awk에서 행과 요소 선택 (0) | 2020.11.22 |
cmake가 작동하지 않고 qmake를 실행할 수 없습니다. (0) | 2020.11.22 |
Javascript의 사용자 입력에서 Date 객체로 시간을 구문 분석하는 가장 좋은 방법은 무엇입니까? (0) | 2020.11.22 |
숨겨진 기능 IntelliJ IDEA (0) | 2020.11.22 |