문자 만 일치하는 정규식


374

문자와 일치하는 정규 표현식을 작성하려면 어떻게해야합니까?


58
당신의 정의는 characters무엇입니까? ASCII? 한자? 이소 -XXXX-X? UTF8?
Ivo Wetzel

45
당신의 정의는 regex무엇입니까? 펄? 이맥스? 그렙?
Pascal Cuoq

4
질문이 영어로되어 있다고 가정 할 때, 영어 사이트에서 질문은 영어 문자와 관련이 있다고 가정하는 것이 공정합니다.
vaer-k

1
나는 것으로 나타났습니다 \ P {L} 편지와 대한 / u는 유니 코드에 대한 플래그가 내 정규식, 즉 임의의 문자와 일치/\p{L}+/u
MAXZOOM

4
Given that the question is in English, on an English site, it's fair to assume the question regards characters in English. 사실입니다. 우리 모두 알다시피, 영어 사용자는 응용 프로그램을 현지화하지 마십시오!
Alex

답변:


392

문자 집합 사용 : [a-zA-Z]소문자와 대문자로 된 A–Z의 한 문자와 일치합니다. [a-zA-Z]+하나 이상의 문자와 ^[a-zA-Z]+$일치 하고 하나 이상의 문자로만 구성된 문자열 만 일치합니다 ( ^$ (가) 각각 문자열의 시작과 끝 표시를).

A–Z 이외의 다른 문자를 일치 시키려면 문자 세트에 추가하십시오 [a-zA-ZäöüßÄÖÜ]. 또는 문자 인 유니 코드 문자\p{L} 를 설명하는 유니 코드 문자 속성 클래스 와 같은 미리 정의 된 문자 클래스를 사용 합니다.


119
그것은 매우 ASCII 중심의 솔루션입니다. 영어가 아닌 텍스트가 거의 나옵니다.
Joachim Sauer

7
@Joachim Sauer : 비 라틴 문자를 사용하는 언어에서는 오히려 중단됩니다.
Gumbo

15
이미 독일어 텍스트의 90 %를 깨고 프랑스어 나 스페인어는 언급하지 않습니다. 그래도 이탈리아 사람은 여전히 ​​꽤 잘 할 수 있습니다.
Ivo Wetzel

9
선택한 "라틴 문자"의 정의에 따라 다릅니다. J, U, Ö, Ä는 모두 사용자의 정의에 따라 라틴 문자인지 아닌지에 대해 논쟁 할 수 있습니다. 그러나 이들은 모두 "라틴 알파벳"을 사용하여 쓰는 언어로 사용됩니다.
Joachim Sauer

9
\ p {L}은 모든 움라우트 세 딜라 악센트 등과 일치하므로 그와 함께 가야합니다.
Radu Simionescu

198

\p{L} 라틴어 이외의 알파벳에 관심이있는 경우 유니 코드 문자 인 모든 항목과 일치


2
모든 정규식 맛이 아닙니다. 예를 들어, vim 정규 표현식 \p은 "인쇄 가능 문자"로 취급 됩니다.
Philip Potter

3
이 페이지 는 java, .net, perl, jgsoft, XML 및 XPath 정규식 지원 \ p {L} 만 제안합니다. 그러나 주요 생략 : 파이썬과 루비 (파이썬에는 정규식 모듈이 있지만).
Philip Potter

6
@Philip Potter : Ruby는 동일한 구문을 사용하여 유니 코드 문자 속성을 지원합니다.
Jörg W Mittag

6
\p{L}\p{M}*+여러 코드 포인트로 구성된 문자, 예를 들어 문자와 악센트 부호로 구성된 문자를 포함 해야한다고 생각 합니다. 당으로 regular-expressions.info/unicode.html
ZoFreX

python 3을 사용하면 오류가 발생합니다bad escape \p at position 0
matanster

46

"문자"의 의미에 따라 :

[A-Za-z]-모든 문자 (대문자 및 소문자)

[^0-9] -숫자가 아닌 모든 문자


나는 lettters를 의미했다. 그래도 작동하지 않는 것 같습니다. preg_match ( '/ [a-zA-Z] + /', $ name);
Nike

[A-Za-z]는 사용할 수있는 문자의 선언 일뿐입니다. [A-Za-z] {1,2} (1 또는 2 문자와 일치) 또는 [A-Za-z] {1, *} (대응하기 위해)을 사용해야하는 횟수를 선언해야합니다. 1 자 이상)
KristofMols

17
음 à, á, ã, Ö, Ä ...도 글자이므로 অ, আ, ই, ঈ, Є, Ж, З, ﺡ, ﺥ, ﺩ א, ב, ג, ש, ת, ... en.wikipedia.org/wiki/Letter_%28alphabet%29
phuclv

@phuclv : 실제로는 인코딩에 따라 다르며 인코딩은 프로그램 설정의 일부 (기본 구성 또는 프로그램의 구성 파일에 선언 된 구성)입니다. 다른 언어로 작업 할 때는 상수를 구성 파일에 저장하는 데 사용했습니다.
Catalina Chircu

1
@CatalinaChircu 인코딩은 절대적으로 관련이 없습니다. 인코딩은 이진 문자 세트로 코드 포인트를 인코딩하는 방법입니다. 예를 들어 UTF-8은 유니 코드를위한 인코딩입니다. 문자 OTOH는 언어에 따라 다르며, [A-Za-z]문자 인 경우 사용중인 언어를 지정해야합니다.
phuclv

32

가장 가까운 옵션은

[\u\l]+

대문자와 소문자의 순서와 일치합니다. 그러나 모든 편집자 / 언어에서 지원하는 것은 아니므로 사용하는 것이 더 안전합니다.

[a-zA-Z]+

다른 사용자가 제안한대로


1
그러나 특수 문자와 일치하지 않습니다.
Nyerguds

20

당신은 사용할 것입니다

/[a-z]/gi

[]-주어진 입력 사이의 문자를 확인합니다

az --- 전체 알파벳을 다룬다

g ----- 전반적으로 전체 문자열

i ----- getting 대문자와 소문자


14

소수의 사람들이 "/ ^ [a-zA-Z] $ / i"로 쓴 정규식은 마지막에 / i 를 언급 했으므로 대소 문자를 구분하지 않으며 처음으로 일치시킨 후에 다시 돌아 오게 되므로 올바르지 않습니다 . 대신에 / 내가 바로 사용 / g 를 이는 전역 용이며 시작 및 종료 에 ^ $ 를 넣을 필요가 없습니다 .

/[a-zA-Z]+/g
  1. [a-z _] + 는 아래 목록에있는 단일 문자와 일치합니다
  2. 수량 자 : + 한 1 회에서 무제한으로, 필요한만큼 돌려주십시오
  3. 아즈 a와 z 사이의 단일 문자 (대소 문자 구분)
  4. AZ A와 Z 사이의 단일 문자 (대소 문자 구분)
  5. g 수정 자 : 전역. 모든 경기 (첫 경기에서 복귀하지 않음)

13

자바:

String s= "abcdef";

if(s.matches("[a-zA-Z]+")){
     System.out.println("string only contains letters");
}

4
다음과 같은 분음 부호는 포함되지 않습니다.ŹŻŚĄ
karoluS




6

\w또는을 사용하십시오 [:alpha:]. 단어로 표시 될 수있는 기호 만 일치하는 이스케이프 시퀀스입니다.


9
\w모든 경우에 좋은 해결책은 아닙니다. 적어도 PCRE에서는 \w다른 문자와도 일치 할 수 있습니다. PHP 매뉴얼 인용 : " "단어 "문자는 문자 또는 숫자 또는 밑줄 문자, 즉 Perl"단어 "의 일부가 될 수있는 문자입니다. 문자 및 숫자의 정의는 PCRE의 문자표에 의해 제어됩니다. 예를 들어, "fr"(프랑스어) 로케일에서 128보다 큰 일부 문자 코드는 악센트 부호 문자에 사용되며 \ w와 일치합니다 .
Amal Murali

단어는 문자에서 다른 문자를 포함
V-SHY

2
\w수단은 문자와 숫자 일치
오이겐 Konkov

4

문자 인코딩에서 문자를 의미하는 경우 공백 \s, 숫자 \d및 기타 특수 문자와 같은 문자가 아닌 문자를 삭제하는 것이 좋습니다 .

[!@#\$%\^&\*\(\)\[\]:;'",\. ...more special chars... ]

또는 위의 부정의 부정을 사용하여 문자를 직접 설명하십시오.

\S \D and [^  ..special chars..]

장점 :

  • 모든 정규식 맛과 함께 작동합니다.
  • 쓰기 쉽고 때로는 많은 시간을 절약 할 수 있습니다.

단점 :

  • 길고 때로는 완벽하지는 않지만 문자 인코딩도 손상 될 수 있습니다.

4

이 정규식을 사용해보십시오 : [^\W\d_]또는 [a-zA-Z].


그것은 [^\W|\d]의미 가 아니다
OGHaza

1
[^\W|\d]하지 의미 \W하지 |하지 \d. 그것은 그것의 |일부 이기 때문에 동일한 순 효과 를 \W갖지만 |생각하는 것처럼 작동하지 않습니다. 그렇더라도 _캐릭터를 받아 들인다는 의미 입니다. 아마 찾고 있습니다[^\W\d_]
OGHaza

동의합니다.에 동의합니다 _. 그러나 "NOT" |는 "AND"와 동일하므로 다음을 [^\W|\d]의미합니다. NOT \W AND NOT\d
Motlab

12
[^ab]하지 의미 a하지 b. [^a|b]하지 의미 a하지 |하지 b. 제 2 예를 수득하는 단계 [a|b|c|d]와 동일하다 [abcd|||]과 동일하다 [abcd|]모두 동일시 - ([a]|[b]|[c]|[d]|[|])(가) |리터럴 문자 아닌 OR 연산자이다. OR 연산자는 문자 클래스의 각 문자 사이에 내재되어 있으므로 실제적으로 |클래스가 |(파이프) 문자 를 허용하도록 합니다.
OGHaza

1

최근에 나는이 패턴을 양식에 사용하여 글자, 공백 및 악센트 표시와 같은 특수 문자를 포함하는 사람들의 이름을 확인했습니다.

pattern="[A-zÀ-ú\s]+"

ASCII 테이블을 살펴 봐야합니다. A-z글자뿐만 아니라À-ú
Toto

0

패턴 = / [a-zA-Z] /

"[a-zA-Z] : # {pattern.match ("mine blossom ")}"입력

"[a-zA-Z] : # {pattern.match ("456 ")}"

"[a-zA-Z] : # {pattern.match (" ")}"

"[a-zA-Z] : # {pattern.match ("# $ % ^ & * ")}"

"[a-zA-Z] : # {pattern.match ("# $ % ^ & * A ")}"입력


3
예를 들어“Zażółć gęslą jaźń”은 어떻습니까?
증인 :

-2
Pattern pattern = Pattern.compile("^[a-zA-Z]+$");

if (pattern.matcher("a").find()) {

   ...do something ......
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.