2017-12-31 157 views
0

BBCode QUOTE 태그에서 사용자 이름과 게시 ID를 캡처하는 정규식을 만들려고합니다.RegEx 캡처 BBCode 사용자 이름 및 아이디

나는 단지 사용자 이름이 직접 게시 ID 다음과 완전히 형성 QUOTE 태그 (예를 들어있을 때 일치하는 텍스트

원하는 [QUOTE = 사용자 이름; numericalid]

나는 현재이 사용하고 있습니다

$matches = preg_match_all('/(\[QUOTE=)(\w*?)(\;)/', $data, $match); 

그러나이와 일치한다 "QUOTE = 짐] [= 밥 QUOTE"아래의 텍스트 만이 아니라 "[QUOTE = 밥".

에서 나는 또한려고 만 사용자 이름과 ID를 반환 따라서 이상적인 결과는 "Bob; 20499344"(텍스트의 모든 사용자 이름/ID 패턴에 해당)입니다.

[QUOTE=Bob;204992][QUOTE=Steve;204939][QUOTE=Steve;204938][QUOTE=Steve;204936]Here is some text. 

[QUOTE=Jim][QUOTE=Bob;20499344][QUOTE=Bob;203489194][QUOTE=Bob;67235994]some more quote here[/QUOTE][/QUOTE][/QUOTE][/QUOTE][/QUOTE][QUOTE=Bob;204194] 

=hello;78967876] 

어떻게하면 정규 표현식을 올바르게 수정할 수 있습니까?

도움이 될 것입니다! 감사!

답변

2

다음과 같은 정규식을 사용하여 다음 "이상적인 수익을"얻을 그룹 # 1과 함께 작업 할 수 있습니다

\[QUOTE=([\w ]+;\d+) 

[\w ]+

는 단어 문자와 공백으로 구성된 사용자 이름 (을 찾습니다, 당신이해야 할 수도 있습니다 이를 실제 제한으로 변경하십시오), \d+은 적어도 하나의 숫자를 찾습니다.

Small sample code

:

<?php 
$string = "[QUOTE=jim][QUOTE=bob;20499344][QUOTE=bob;203449194][QUOTE=bob;67204994]some more quote here[/QUOTE][/QUOTE][/QUOTE][/QUOTE][/QUOTE][QUOTE=bob;204994]"; 
$matches = preg_match_all('/\[QUOTE=([\w ]+;\d+)/', $string, $match); 
print_r($match[1]); 
?> 

출력 :

Array 
(
    [0] => bob;20499344 
    [1] => bob;203449194 
    [2] => bob;67204994 
    [3] => bob;204994 
) 
+0

감사합니다 - 그 예는 실제로 내 이전의 시도 중 하나였다. 나는 그곳에서 저를 엉망으로 만든 것은 사용자 이름의 공간이라는 것을 깨달았습니다. 수정 프로그램이 완벽하게 작동합니다. – Will