2012-07-04 3 views
0

내 문자열에서 태그를 일치 시키려고합니다. @[anyNumbers:anyNumbers:anyLetters] @[]을 제거하고 나중에 모든 문자열을 inbetween로 남겨두기를 원합니다.
가장 쉬운 방법은 무엇입니까? (ODWS) 캠페인 [신발없이 한 날 : 274 159208207468539]간단한 preg_match 정규식이 필요합니다.

$str = 'Have you heard of the @[159208207468539:274:One Day without Shoes] (ODWS) campaign? ODWS is an annual initiative by @[8416861761:274:TOMS] to bring awareness around the impact a pair of shoes can have on a child's life.'; 
    function gettag($text){ 
    // 
      //$regex = "\@[([a-z0-9-:]*)\]"; 
      //$match = preg_match("/^$regex$/", $text); 
        //return $match; 
        return preg_replace('/@\[(\d+:\d+:[a-zA-Z]+)\]/', '${1}', $text); 

    } 
    gettag($str); 

반환

당신은 @를 들어 본 적이 있습니까? ODWS는 연간 계획으로 8416861761 : 274 : TOMS 어린이 안전을 위해 신발 한 켤레에 미치는 영향에 대한 인식을 제고합니다. 당신의 패턴을 약간 수정 된 버전을 사용

+0

function gettag($text) { return preg_replace('/@\[(\d+:\d+:[a-zA-Z ]+)\]/', '${1}', $text); } 

See it on codepad

나는 당신의 모두에게 감사를 기대했다 당신의 시간과 문제. 지금까지 필자가 필요로하는 배열을 필터가 반환하고 @ []의 제거가 아직 실패하지 않았습니다. 나는이 두 가지를 모두 사용하기 위해 당신의 솔루션을 혼합해야했기 때문에, 두 사람 모두 내가 이것을 얻지 못했을 것입니다. –

답변

0

,이 작업을 수행 할 수 있습니다

function gettag($text) { 
    return preg_replace('/@\[([ a-z0-9-:]*)\]/i', '${1}', $text); 
} 

을 당신이 더 구체적으로하고 싶은 경우에, 우리는 엄격한 것으로 패턴을 수정할 수 있습니다

+0

샘플 $ str을 추가했습니다. 여기서 세 번째 구분 기호의 공백은 대체하지 않습니다. –

+1

아, 글자 만 쓰는 줄 알았는데 간단한 수정 이예요. 캐릭터 클래스에 공간을 추가하여 문제를 해결했습니다. – ohaal

1
<?php 

$string = "@[123:456:abcZ]"; 
preg_match('/^@\[(([0-9]+:){2}[a-zA-Z]+)\]$/', $string, $matches); 

echo $matches[1]; 
+0

경고 : preg_match()는 매개 변수 2가 문자열이어야한다고 가정합니다. 배열은 /home/content/06/8649306/html/feed.php에서 114 줄로 –

+1

흥미 롭습니다. 그것은 내 상자에 경고없이 실행됩니다. 제공된 예제에서 두 번째 매개 변수는 분명히 문자열입니다. 실행중인 스 니펫을 제공해 주시겠습니까? – keelerm

+0

나중에 배열을 반환하려고 시도했습니다. return $ matches [1]; $ matches를 리턴하지만, 첫 번째는 아무것도 리턴하지 않으며, 나중에는 오류를 리턴합니다. –

관련 문제