[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]
각각.
* 이 질문에 태그가 있다는 것을 알고 있습니다vb.net, 그러나 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+)*$
단어 사이에 하나의 공백 만 허용하고 선행 또는 후행 공백은 허용하지 않습니다.
다음은 정규식에 대한 설명입니다.
^
문자열 시작시 어설 션 위치-
\w+
모든 단어 문자와 일치[a-zA-Z0-9_]
- 수량 자 :
+
가능한 한 여러 번 한 번과 무제한으로 [욕심 많은]
- 수량 자 :
- 첫번째 캡처 그룹
(\s\w+)*
- 수량 자 :
*
가능한 많은 횟수로 0에서 무제한 사이에 [욕심 많은] \s
공백 문자와 일치[\r\n\t\f ]
\w+
모든 단어 문자와 일치[a-zA-Z0-9_]
- 수량 자 :
+
가능한 한 여러 번 한 번과 무제한으로 [욕심 많은]
- 수량 자 :
- 수량 자 :
$
문자열 끝에 어설 션 위치
답변
이것은 처음에 공간을 허용하지 않습니다. 그러나 단어 사이에 공백을 허용합니다. 단어 사이에 특수 문자를 사용할 수도 있습니다. FirstName 및 LastName 필드에 적합한 정규식입니다.
\w+.*$