我需要在沒有RT的情況下匹配所有提及。我試過添加!否定rt但不工作。正則表達式提及
preg_match('/\b!rt\s*@([a-zA-Z0-9_]{1,20})/i', $string, $data);
這必須匹配:'你好@user你好嗎'。
這不是:'RT @user你好嗎'
我不試圖提取用戶名或什麼的,我需要的是要知道文本是否沒有RT的@user。
任何想法?
我需要在沒有RT的情況下匹配所有提及。我試過添加!否定rt但不工作。正則表達式提及
preg_match('/\b!rt\s*@([a-zA-Z0-9_]{1,20})/i', $string, $data);
這必須匹配:'你好@user你好嗎'。
這不是:'RT @user你好嗎'
我不試圖提取用戶名或什麼的,我需要的是要知道文本是否沒有RT的@user。
任何想法?
!
在正則表達式中不會「否定」。這符合文字!
。你想要的是一個「負面的看法」。
/(?<!RT)\[email protected]([a-z0-9]{1,20})/i
(?<!RT)
裝置RT「不前面有 「」。
這將匹配的用戶名中, 「RT」 不包括爲匹配。
$match = preg_match('/(?<!RT)\[email protected]([a-z0-9]{1,20})/i', $string);
$match
如果是0
,這意味着該字符串是「RT @user ...」,如果$match
不是0
,則表示該字符串確實是而不是以「RT @user」開頭
對正則表達式lookarounds更多信息:http://www.regular-expressions.info/lookaround.html
這是行不通的,當RT在前面時,趕上[at]用戶 – greenbandit
@火箭我想他想抓住「你好」而不是「RT」。他有這樣一個老問題並將其刪除。 –
@火箭我想知道文本是否具有此結構[at]用戶沒有RT過濾它。 – greenbandit
如果你只是想匹配的用戶名,你可以嘗試/(?<!RT)(@.*?)(?=\s)/i
我相信這應該這樣做:
$string1 = 'hello @user how are you';
preg_match('~\s?(?<!RT) @[a-z0-9]+~i', $string1, $data);
print_r($data);
// array('0' => '@user');
$string2 = 'RT @user how are you';
preg_match('~\s?(?<!RT) @[a-zA-Z0-9]+~', $string2, $data);
print_r($data);
// empty array
兩個示例都返回:Array ( [0] => @user ) – greenbandit
糟糕!編輯我的答案。 – mpratt
你想匹配什麼?只是'@ user'?或整個字符串。 –
我想知道文本是否具有此結構[at]沒有RT的用戶來過濾它。 – greenbandit