[regex] 단어 사이에 공백을 허용하는 정규식

기호를 방지하고 문자와 숫자 만 허용하는 정규식을 원합니다. 아래 정규식은 훌륭하지만 단어 사이에 공백을 허용하지 않습니다.

^[a-zA-Z0-9_]*$

예를 들어이 정규식을 사용하는 경우 “HelloWorld”는 문제가 없지만 “Hello World”는 일치하지 않습니다.

공백을 허용하도록 어떻게 조정할 수 있습니까?



답변

tl; dr

캐릭터 클래스에 공백을 추가하십시오 .

^[a-zA-Z0-9_ ]*$

 


지금, 당신이 엄격한되고 싶다면 …

위의 내용이 정확하지 않습니다. 0 이상*의미 한다는 사실로 인해 다음과 같은 경우 모두 일치한다는 의미는 아닙니다.

  • 빈 문자열 “”.
  • 문자열은 공백 “”으로 구성됩니다.
  • 공백이있는 “Hello World”로 이어지는 문자열입니다.
  • 단어 “Hello World”사이에 공백이 여러 개 포함 된 문자열입니다.

원래 OP는 엄격 성이 중요하지 않은 것처럼 보이는 기본적인 질문을했기 때문에 그러한 세부 사항이 가치가 있다고 생각하지 않았습니다. 그러나 질문이 어느 정도 인기를 얻었으므로 말하고 싶습니다 …

@ stema의 답변을 사용하십시오 .

내 맛에서 (을 사용하지 않고 \w) 다음과 같이 해석됩니다.

^[a-zA-Z0-9_]+( [a-zA-Z0-9_]+)*$

(@stema와 상관없이 upvote하십시오.)

이 (및 @stema의) 답변에 대해 알아야 할 사항 :

  • 단어 사이에 여러 공백 을 허용 하려면 (예를 들어 실수로 두 번 공백을 허용하거나 PDF에서 복사하여 붙여 넣은 텍스트로 작업하는 경우) 공백 +뒤에 다음을 추가하십시오 .

    ^\w+( +\w+)*$
  • 탭과 줄 바꾸기 (공백 문자)를 허용하려면 공백을 다음으로 바꾸십시오 \s+.

    ^\w+(\s+\w+)*$

    여기가 제안 +예를 들어, 윈도우 바꿈이 구성 때문에 기본적으로 시퀀스의 공백 문자, \r\n당신이 필요합니다, 그래서는 +모두를 잡을 수 있습니다.

그래도 작동이 안되는?

사용중인 정규식의 방언을 확인하십시오. * Java와 같은 언어에서는 백 슬래시 ( \\w , 및) 를 이스케이프해야합니다 \\s. 세 이상의 기본 언어와 유틸리티,에서와 같은 sed, \w그리고 \s정의되지 않은, 그래서 문자 클래스, 그들을 쓰는 [a-zA-Z0-9_][\f\n\p\r\t]각각.

 


* 이 질문에 태그가 있다는 것을 알고 있습니다, 그러나 25,000 + 조회수를 기반으로, 나는이 질문을 겪는 사람들뿐만 아니라 추측합니다. 현재 Google에서 검색 구문, 정규 표현식 공백 단어를 처음으로 맞았습니다 .


답변

한 가지 가능성은 acheong87이 제안한 것처럼 캐릭터 클래스에 공백을 추가하는 것입니다.이 패턴은 패턴이 얼마나 엄격한 지에 달려 있습니다. 이는 5 개의 공백으로 시작하는 문자열 또는 공백으로 만 구성된 문자열을 허용하기 때문입니다.

다른 가능성은 패턴을 정의하는 것입니다.

나는 \w이것을 대부분의 정규식 풍미에서 사용 합니다 [a-zA-Z0-9_](일부에서는 유니 코드 기반입니다)

^\w+( \w+)*$

이렇게하면 일련의 단어가 하나 이상 허용되며 단어는 공백으로 나뉩니다.

^ 문자열의 시작과 일치

\w+ 일련의 최소 하나의 단어 문자와 일치

( \w+)*0 번 이상 반복되는 그룹입니다. 그룹에서는 공백이 있고 일련의 단어 문자가 하나 이상 있어야합니다.

$ 문자열의 끝과 일치


답변

이것은 나를 위해 일했다

([\w ]+)


답변

시도해보십시오 :

^(\w+ ?)*$

설명:

\w             - alias for [a-zA-Z_0-9]
"whitespace"?  - allow whitespace after word, set is as optional


답변

나는 당신이 앞 / 뒤 공간을 원하지 않는다고 가정합니다. 즉, 정규식을 “첫 번째 문자”, “중간에있는 물건”및 “마지막 문자”로 분할해야합니다.

^[a-zA-Z0-9_][a-zA-Z0-9_ ]*[a-zA-Z0-9_]$

또는 perl과 같은 구문을 사용하는 경우 :

^\w[\w ]*\w$

또한 : 의도적으로 정규 표현식에 빈 문자열도 허용한다고 말하면 전체 항목을 선택 사항으로 만들어야합니다.

^(\w[\w ]*\w)?$

단일 공백 ​​문자 만 허용하려면 약간 다르게 보입니다.

^((\w+ )*\w+)?$

이것은 0..n 단어 뒤에 하나의 공백과 공백이없는 단어를 더한 것과 일치합니다. 그리고 빈 문자열을 허용하기 위해 모든 것을 선택적으로 만듭니다.


답변

이 정규식

^\w+(\s\w+)*$

단어 사이에 하나의 공백 만 허용하고 선행 또는 후행 공백은 허용하지 않습니다.

다음은 정규식에 대한 설명입니다.

  1. ^ 문자열 시작시 어설 션 위치
  2. \w+ 모든 단어 문자와 일치 [a-zA-Z0-9_]
    1. 수량 자 : +가능한 한 여러 번 한 번과 무제한으로 [욕심 많은]
  3. 첫번째 캡처 그룹 (\s\w+)*
    1. 수량 자 : *가능한 많은 횟수로 0에서 무제한 사이에 [욕심 많은]
    2. \s 공백 문자와 일치 [\r\n\t\f ]
    3. \w+ 모든 단어 문자와 일치 [a-zA-Z0-9_]
      1. 수량 자 : +가능한 한 여러 번 한 번과 무제한으로 [욕심 많은]
  4. $ 문자열 끝에 어설 션 위치

답변

이것은 처음에 공간을 허용하지 않습니다. 그러나 단어 사이에 공백을 허용합니다. 단어 사이에 특수 문자를 사용할 수도 있습니다. FirstName 및 LastName 필드에 적합한 정규식입니다.

\w+.*$