2012-06-21 2 views
-2

그래서 난 그냥 "world13"을 얻고 싶은 단어 "세계"를 제외하고 내가 NULL 모든 것을 대체 할 문자열,매우 복잡한 정규식

<?php 

$string = <<<STR 

/\[email protected]#$%^&*()?.,djasijdiwqpk,=-c./zcxzo123154897kp02ldz.,world90iops02&&&8ks 

STR; 

및 번호 1, 3,

가 나 "world31"해당 문자열에서 정규 표현식 사용

나는 strpos() 및 substr()을 통해 기본 솔루션을 이미 구현했으며 이것은 예외로 작동합니다. 하지만 정규식

를 통해이 작업을 수행 할 필요가

질문은 :

는 정규식을 사용하여 해당 단어를 추출 할 수 있습니까?

+1

여기서 '1'과 '3'은 어디에서 왔습니까? – zerkms

답변

1

~(world(?:(31|13))~i. 'i'은 정규식 대소 문자를 구분하지 않습니다. ?:이 있으므로 일치하는 배열에 별도의 결과로 넣지 않습니다. 그건 그렇고, 매우 복잡하다고하지는 않을 것입니다. 에 1과 3을 넣고 싶다면 ~(world|1|3)~i을 사용할 수 있습니다.

+0

거짓말! Expression은 OPs'$ string'에서 문자열'world13'을 추출하지 않습니다! – Qtax

+2

가 작동하지 않는 것 같습니까? http://rubular.com/r/pLQNJ5XFxT – furier

+0

@Qtax 아니, 그렇지 않을 것입니다, 당신은 그것에 대해 절대적으로 옳습니다. 그럼에도 불구하고, 나는 그의 "world31"이나 "world13"을 실제로 원한다고 가정했다. 대신 그의 예제 문자열이 정확하지 않다고 불평하지 않았다. 그래, 그의 질문은 나아 졌을 수도 있었지만, 그의 질문에 대한 해결책은 주어진 것처럼 보인다. 자라다. –

1

RegEx를 사용하여 해당 단어를 추출 할 수 있습니까?

예. 내가 그,하지만

아, 내가 이해 world13 또는 world31을 추출 할 수 없습니다 알고

(world) 

:이 정규 표현식을 사용할 수 있습니다! 다음을 사용할 수 있습니다 :

$string = preg_replace('/.*/s', 'world13', $string); 
+0

그래, 그거 알아,하지만 나는 세계 13 또는 세계 31을 추출 할 수 없다. – Yang

+0

@metal_fan, 나는 고쳤다. – Qtax

+2

놀랍지 만,'$ string = 'world13';' – zerkms

1

간단한 해결책은 필요한 것을 찾은 다음 문자열에 결합하는 것입니다.

preg_match_all('/world|[13]/', $string, $matches); 
$ret = join($matches[0]); 
관련 문제