[php] 정규식에서 공백 일치

PHP 정규식에서 공백 문자를 일치시켜야합니다. 누구든지 아이디어가 있습니까?

두 단어 사이의 공간 인 “gavin schulz”와 같은 의미입니다. 문자, 숫자 및 공백 만 허용하도록 정규식을 사용하고 있습니다. 그러나 공간을 찾는 방법을 모르겠습니다. 이것이 내가 지금 가진 것입니다.

$newtag = preg_replace("/[^a-zA-Z0-9s|]/", "", $tag);



답변

공간을 찾고 있다면 그것은 " "(한 공간)입니다.

하나 이상을 찾고 있다면 " *"( 공백과 별표) 또는 " +"(한 공백과 플러스)입니다.

당신이 일반적인 간격, 사용을 찾고 있다면 "[ X]"하거나 "[ X][ X]*"또는 "[ X]+"경우 X물리적 탭 문자 (각각은 모든 예에서 하나의 공간이 앞에있다).

이것들은 내가 본 모든 * 정규식 엔진 에서 작동합니다 (일부는 하나 이상의 "+"특성을 가지고 있지 않습니다 ).

당신이 알고 있다면 더 현대적인 정규식 엔진 중 하나를 사용 "\s"하고 있으며 그 변형이 갈 길입니다. 또한 단어 경계는 줄의 시작과 끝과도 일치한다고 생각합니다. 앞이나 뒤에 공백없이 나타날 수있는 단어를 찾을 때 중요합니다.

PHP의 경우이 페이지 가 도움 될 수 있습니다.

편집에서 유효하지 않은 모든 문자를 제거하려는 것으로 나타납니다. 시작 부분은 다음과 같습니다 (정규식 안의 공백에 유의하십시오).

$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


답변

\040 공백 문자와 정확히 일치합니다.

정규식 PHP 참조

Regex PHP의 새로운 링크
이스케이프 시퀀스


답변

정규 표현식에서 공백에 대해 알아야 할 모든 것이 있습니다.

  • [[: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);