PHP 정규식에서 공백 문자를 일치시켜야합니다. 누구든지 아이디어가 있습니까?
두 단어 사이의 공간 인 “gavin schulz”와 같은 의미입니다. 문자, 숫자 및 공백 만 허용하도록 정규식을 사용하고 있습니다. 그러나 공간을 찾는 방법을 모르겠습니다. 이것이 내가 지금 가진 것입니다.
$newtag = preg_replace("/[^a-zA-Z0-9s|]/", "", $tag);
답변
공간을 찾고 있다면 그것은 " "
(한 공간)입니다.
하나 이상을 찾고 있다면 " *"
( 두 공백과 별표) 또는 " +"
(한 공백과 플러스)입니다.
당신이 일반적인 간격, 사용을 찾고 있다면 "[ X]"
하거나 "[ X][ X]*"
또는 "[ X]+"
경우 X
물리적 탭 문자 (각각은 모든 예에서 하나의 공간이 앞에있다).
이것들은 내가 본 모든 * 정규식 엔진 에서 작동합니다 (일부는 하나 이상의 "+"
특성을 가지고 있지 않습니다 ).
당신이 알고 있다면 더 현대적인 정규식 엔진 중 하나를 사용 "\s"
하고 있으며 그 변형이 갈 길입니다. 또한 단어 경계는 줄의 시작과 끝과도 일치한다고 생각합니다. 앞이나 뒤에 공백없이 나타날 수있는 단어를 찾을 때 중요합니다.
편집에서 유효하지 않은 모든 문자를 제거하려는 것으로 나타납니다. 시작 부분은 다음과 같습니다 (정규식 안의 공백에 유의하십시오).
$newtag = preg_replace ("/[^a-zA-Z0-9 ]/", "", $tag);
# ^ space here
각 단어 사이에 공백이 하나만 있고 시작 또는 끝 부분에 공백이 없도록 속임수를 사용하려면 약간 더 복잡하지만 아마도 다른 질문 일 것입니다.
$newtag = preg_replace ("/ +/", " ", $tag); # convert all multispaces to space
$newtag = preg_replace ("/^ /", "", $tag); # remove space from start
$newtag = preg_replace ("/ $/", "", $tag); # and end
답변
답변
정규 표현식에서 공백에 대해 알아야 할 모든 것이 있습니다.
[[:blank:]]
공백 또는 탭만[[:space:]]
공백\s
공백 문자\v
수직 공백\h
수평 공백x
공백 무시
답변
이 경우 REGEX를 사용하는 것은 과잉 일 것 같습니다. 그냥 공간 문자를 찾기 위해 strpos 하지 않는 이유는 무엇입니까? 또한 정규 표현식의 공백 문자에는 특별한 것이 없으므로 다른 문자를 검색 할 때와 마찬가지로 공백 문자를 검색 할 수 있어야합니다. 즉, 패턴 공백을 비활성화하지 않으면이 경우에는 거의 필요하지 않습니다.
답변
Perl에서 스위치는 \s
(공백)입니다.
답변
문자, 숫자 및 공백 만 허용하도록 정규식을 사용하고 있습니다.
그런 다음 이미 가지고있는 공간을 추가하는 것만 큼 간단합니다.
$newtag = preg_replace("/[^a-zA-Z0-9 ]/", "", $tag);
(참고, 나는 s|
의도하지 않은 것처럼 보이는 것을 제거 했습니까? 확실히 s
중복되었습니다. |
필요한 경우 복원 할 수 있습니다 )
특별히 원하는 경우 * A * 공간에서와 같이 단 하나 하나,이보다 더 복잡한 표현을해야합니다, 그리고 논리의 별도의 비 정규식 조각을 고려할 수 있습니다.
답변
단어 경계에 \ b를 사용할 수도 있습니다. 이름으로 다음과 같이 사용합니다.
[^\b]+\b[^\b]+(\b|$)
편집 Perl 예제에서 이것을 정규 표현식으로 수정
if( $fullname =~ /([^\b]+)\b[^\b]+([^\b]+)(\b|$)/ ) {
$first_name = $1;
$last_name = $2;
}
다시 편집 원하는 내용을 기반으로 :
$new_tag = preg_replace("/[\s\t]/","",$tag);