2009-09-22 3 views
1

트위터의 모든 RT 시나리오와 일치하는 올바른 정규 표현식을 찾으려고합니다 (Twitter의 새로운 리트 윗 API를 기다릴 수 없음). RT에서 볼 수있는 방법은 Twitter에서 반환 된 문자열의 시작, 중간 또는 끝 부분에있을 수 있습니다.정규 표현식과 PHP로 트위터 RT를 찾으려고합니다

([Rr을]) ([고작])

내가 노력할 상관없이, 나는 모든 시나리오와 일치 할 수 없습니다 : 그래서,이 정규 표현식의 시작 부분에 뭔가 말을해야합니다 하나의 정규 표현식.
나는

시도 [^ | \ S +]

역전사 문자열의 시작 부분에 하나 개 이상의 공백 문자 이후에 나타납니다,하지만하지 않았다 어디 시나리오에 맞게 문자열 또는 RT의 끝 부분에 대해 동일한 작업을 수행하십시오.
내가

을 시도 | 역전사 중 하나를 문자열의 끝에서 표시 또는 하나 이상의 공백 문자가와 마찬가지로, 그것을 다음과 같은있을 때 경우에 맞게 [\ s에 + $]

'이전'- 작동하지 않았습니다.

누군가 내가 여기서 뭘 잘못 설명 할 수 있습니까? (즉,이 않은 워드로 둘러싸여 RT의 고립 된 인스턴스를 찾을 수

/\brt\b/i 

: 어떤 도움이나 제안은 매우

+0

사람들이 보통 특정인에게 retweet하지 않습니까? "RT"가 아닌 "RT @ ..."를 확인하여이 범위를 좁힐 수 있습니다. – Tim

+0

리트 윗 API가 이번 주와 같이 시작됩니다. 맞습니까? – ceejayoz

+0

ceejayoz 네, 곧 출시 될 것이라는 것을 알지만 내 프로젝트는 리트 윗을 찾는 것부터 시작합니다. 리트 윗에서해야 할 일들을 계속 진행하고 싶습니다. 그래서 API가 준비되면 코드에이 작은 변화를 소개 할 것입니다. –

답변

7

하는 당신은 아마 같은과 함께 행복한 수 있습니다 (:) 언제나처럼)을 이해할 수있을 것이다 경계선)을 사용하고 정규 표현식 끝에 /i 수정자를 사용하여 대소 문자를 구분하지 않습니다.

"Art"와 "Quartz"와 같은 단어가 포함 된 임의의 트윗이 실제로 리트 윗이라고 생각하지 않도록 단어 경계를 원합니다. 그렇다하더라도 오탐 (false positive)이 발생할 것입니다.

기본적으로 정규 표현식은 문자열 내부 어디에서나 일치 할 수 있기 때문에 실제로 무엇을 신경 쓰지 않거나 일치하지 않는 경우 일치 또는 앞에 오는 것을 고려할 필요가 없습니다. 존재합니다.

3
if(preg_match('/\brt\s*@(\w+)/i', $tweet, $match)) 
    echo 'Somebody retweeted ' . $match[1] . "\n"; 
+0

look 아담 대답처럼 내가 찾던 우아한 해결책입니다. 감사합니다. –

+0

예, Adam 's는 당신이 한 해결책입니다.하지만 @ 기호도 고려해야합니다. "turn rt"를 게시하여 길 찾기를 제공하는 사람과 겹칠 수 있습니다. @를 보거나 문자열 시작 부분에 고정 시키면이 문제를 완화하는 데 도움이됩니다. –

관련 문제