2014-03-25 5 views
0

RegExp가있는 문자열에서 단어 (read : functions)를 추출하여 PHP 함수에 전달하려고합니다.RegExp - 특정 문자로 시작하지 않는 단어 찾기

꽤 잘 이미 다음 작품 :

$func = preg_replace("/(\b.+\b)/Ue", 'extract_functions(\'\\1\')', $oneliner); 

그것은 또한 같은 이름을 가진 변수를 추출 문자열에서 기능을 기존의 추출물하는 동안,하지만 시작 $ 문자없이.

문자열에 get_function이라는 기존 함수가 포함되어있는 경우 이라는 변수가 추출되지 않으므로이라는 변수가 추출되므로 함수 또는 변수의 추출 여부를 확인할 수 없습니다.

내 생각은 $로 시작하는 단어를 제외하는 것이었다 그러나 그것은 작동하지 않는 것 : 나는 아이디어 나갈거야

$func = preg_replace("/[(\b[^\$].+\b)/Ue", 'extract_functions(\'\\1\')', $oneliner); 

을 ...

+0

일부 샘플 입력 문자열과 예상 결과를 표시 할 수 있습니까? – Toto

+0

여기를 참고하십시오 : http://regex101.com/r/vD6nQ0#PCRE이 스크립트에서는 문자열에서'$ current_action'으로 만 존재하고, 결코 함수로 존재하지는 않지만'current_action'을 결과로 가져옵니다. – Alphawolf

답변

1

덕분에, 여기에 나를 위해 작동 솔루션의 단어,하지만 ( 부분을 만들지 않고.

저는 ( 부분에 대해 제가 생각하기에 PHP 기능을 정의하는 부분을 찾아갔습니다.

개선 될 의향이 있습니다! Jeff에게 감사드립니다!

+0

아, 만약 함수 이름 뒤에'(', '예'라고 쓰여진다면, 그럴 수 있습니다.) 그러나 이제는 ungreedy 플래그를 제거 할 수 있습니다 :'$ re = '/ (? Jerry

+0

True, thanks. :) – Alphawolf

1

당신은 할 부정적인 lookbehind을 사용할 수 있습니다 이 함수/변수 앞에 더 $는 없다 있는지 : 그런데 [(\b[^\$]으로

$func = preg_replace("/(?<!\$)(\b.+\b)/Ue", 'extract_functions(\'\\1\')', $line); 

조금 잘못 형성된다. 문자 클래스에 (, \b, ^$이 포함되어 있는데 작동하지 않습니다. $ 문자와 일치하지 않는 문자가 실제로 일치합니다.

/[^$](\b.+\b)/으로 조금 더 가깝지만 문자열 시작 부분에서 작동하지 않을 수 있습니다. 뿐만 아니라 제프에 의해 제안으로 긍정적 예측 각 후 ( 검사로

$filecontent = file_get_contents($file); // Parsing the file's contents into a string 
$re = '/(?<!\$)(\b\S+?\b)(?=\()/'; // The pattern 
preg_match_all($re, $filecontent, $out, PREG_PATTERN_ORDER); 

print_r($out[0]); 

나는 부정적인 lookbehind을 사용하고 있습니다 : 제프에

+0

안녕하세요 제리, 나는 부정적인 lookbehinds에 대해서도 읽고, 당신이 그것을 언급 했으니, 나는 처음에는 행복했지만 어떤 차이도없는 것 같습니다. 나는 여전히 부정적인 lookbehind 부분의 유무에 관계없이 똑같은 결과를 얻고 있습니다. 두 번 체크했는데 문자열에 함수'get_function'이 없지만 변수'$ get_function'이 있고 문자열에'get_function'이있는 결과를 얻습니다. – Alphawolf

+0

@Alphawolf 안녕하세요! 음, 아마도 입력 문자열 샘플을 줄 수 있습니까? 어쩌면 더 나은 해결 방법이 있을까요? 함수와 변수는 공백을 포함 할 수 없습니다. 아마도'(? Jerry

+0

흠. 그것은 실제로 작동하는 것 같다 : http://regex101.com/r/vD6nQ0#PCRE 그러나, 내 스크립트에서, 나는'current_action'을 결과로 얻는다. 문자열에'$ current_action' 만 존재한다고해도 결코 그렇지 않다. 함수로서. 조사 중 ... 지금까지 고마워, 제리! :-) – Alphawolf

관련 문제