2008-09-10 4 views
2

공백 문자 (탭 및/또는 공백)가 뒤 따르는 하나 이상의 공백 문자 (탭 및/또는 공백)와 그 뒤에 하나 이상의 숫자 문자가오고 알파벳 문자와 세미콜론 다음에 쉼표와 숫자 및 세미콜론으로 구분됩니다.PHP 정규식에 어떤 문제가 있습니까?

시작 :

hello world  1007; 

종료 :

hello world,1007; 

답변

6

시작과 끝의 두 |은 잘못되었으므로 둘 다 정방향 슬래시 여야합니다.

다른 모든 슬래시는 역 슬래시이어야하며 이스케이프 처리해야합니다.

PHP 4.04 이후 $n은 캡처 그룹을 참조하는 데 선호되는 방법입니다. 당신이 당신의 백 슬래시를 이스케이프 할 필요가 없습니다 작은 따옴표를 사용하는 경우

$output = preg_replace("/(\\D)\\s+(\\d+;)/", "$1,$2", $output); 

:

$output = preg_replace('/(\D)\s+(\d+;)/', '$1,$2', $output); 
+3

내가 올바르게 기억, 시작 - 최종의 패턴 상징합니다 ('|')이 항공사는 PHP 필요합니다 preg_ * 함수. –

+0

좋은 지적 - 나는 또한 백 슬래시를 벗어나는 것을 잊었다. – samjudson

3

그 미래 슬래시이어야한다 백 슬래시 내가 예를 제공합니다

? 큰 따옴표를 작은 따옴표로 변경하지 않으면 PHP에서도 이스케이프 처리해야합니다.

1

당신은 정규 표현식에서 백 슬래시를 원하는을, 슬래시 없습니다. 필요하다 시작 및 종료 파이프 (또는 정규식에 대한 또 다른 구분)

$x = "hello world  1007;";  
echo preg_replace('|(\D)(\s+)(\d+)(;)|','$1,$3',$x); 
echo preg_replace('/(\D)(\s+)(\d+)(;)/','$1,$3',$x); 
echo preg_replace('{(\D)(\s+)(\d+)(;)}','$1,$3',$x); 
+0

시작과 끝 구분 기호로 사용할 수 있다는 것을 몰랐습니다. 감사합니다. – samjudson

관련 문제