2009-10-04 7 views
0

나는 preg_replace을 사용하지만 천천히 배우는 것으로 혼란 스럽습니다. ,preg_replace 글자로 시작하는 숫자를 찾으려면 정규 표현식

$str= preg_replace('#\W\d+#', '\W \d+', $str); 

생각 임 공백없이 바로 전에 문자가 숫자를 찾고 있다는 것입니다 ABC123

을 :

나는 기능과 도움이 필요합니다. 나는 단순히 사이에 공백이나 문자를 포함 어떻게 ('ABC 123'및 NOT '123ABC'NOT)는

등 ABC123은 ABC 123 ABC @@ (123 개)

모두 감사하게!

+0

여기를보세요 : http://txt2re.com/ 도움이 될 수도 있습니다. – SeanJA

+0

감사하지만 필자는 너무 많은 코딩을하고있어 머리가 아프다! – bluedaniel

답변

2
<?php 

$str = 'abc()1234'; 
$str= preg_replace('#([a-zA-Z()])(\d+)#', '$1 $2', $str); 

echo $str; 

출력 :

ABC() 1,234

$ 1 $ 2 역 참조하며, 각각 제 1 및 제 2 포착기를 참조. 자세한 정보 @http://www.regular-expressions.info/brackets.html.

+0

예제에서 preg_match를 사용했기 때문에 배열이 어떻게 채워지는지와 preg_replace에 사용할 수있는 것을 실제로 볼 수 있습니다. $ 1과 $ 2는 카오스의 예에 따라 첫 번째와 두 번째 캡처 된 부분을 참조합니다. –

+0

도움을 주셔서 감사합니다. 내 최근 댓글에 도움을 주시겠습니까? '아주 좋습니다. 하지만 나에게 실제로는 숫자 앞에 괄호가 있는지 확인해야 할 수도 있기 때문에 패턴에서 abc() 123도 수행 할 수 있습니까? ' – bluedaniel

+0

(와)를 설명하도록 업데이트했습니다. –

3

당신은 당신이하지 생각하지 않습니다

\W

$str= preg_replace('#([A-Za-z]+)(\d+)#', '$1 $2', $str); 
를 원하는; \w은 "단어 문자"를 의미하고 \W은 " 이 아니며 단어 문자"를 의미합니다. 당신이 특별히 글자을 원하기 때문에 원하는 글자도없고, 모든 글자와 일치하는 글자 종류 인 [A-Za-z]이 필요합니다. "하나 이상"과 일치 시키려면 그 뒤에 +이 필요합니다.

괄호는 나중에 참조 할 수 있도록 표현식의 일부를 캡처하는 방법입니다. $1$2은 괄호로 캡쳐 한 텍스트를 나타냅니다.

+0

아주 좋습니다. 그러나 나에게 실제로는 숫자 앞에 대괄호가 있는지 확인해야 할 수도 있기 때문에 패턴도 abc()를 수행 할 수 있습니까? – bluedaniel

+0

[A-Za-z] [A-Za-z()]를 만들고 다른 문자를 포함 시키십시오. 그래도 [와]를 벗어나야 할 수도 있습니다. –

+0

정말로 잘 돌아간 고마워요. 도움이 뭔지 말해 줄 수 없다 – bluedaniel

0

에서 /([A-Za-z])(\d+)//([A-Za-z]+)(\d+)/의 차이를 볼 수 있습니다. 두 경우 모두 preg_replace와 함께 작동합니다. 그러나 후자는 preg_match_all과 함께 작동하기 때문에보다 강력합니다.