2014-12-08 135 views
1
preg_match('/\$(\d+\.\d+)/',$message,$keywords); 
dd($keywords); 

嗨,已經得到了幾個問題正則表達式提取賽後

1)是否有可能檢測/提取正則表達式之後的文本?例如,我試圖檢測1.20美元以後的文本,例如每小時/小時,每小時/小時。

1.1)也許就像提取匹配

1.2)可能知道,如果我不能提取匹配的位置後20個字符?

$ 100000 /小時的測試測試測試

提取試驗測試TST

+0

什麼是輸入?例如$ message的價值 – 2014-12-08 08:40:51

+0

剛剛添加了「輸入」它可以是任何的 – CodeGuru 2014-12-08 08:41:48

+0

這樣的東西? https://regex101.com/r/cX2yU8/3 – 2014-12-08 08:48:41

回答

3

1)把你想在正則表達式中提取的一切,就像這樣:

preg_match('#\$(\d+\.\d+)(\s+per hour|\s*/hr|\s+per hr|\s*/hour)?#',$message,$keywords); 

你會得到$關鍵詞[1]和$關鍵字另一片的文字量[2];

1.1)使用/\$(\d+\.\d+)(.{,20})/可以在第二場比賽中獲得至多20個字符(如果您刪除逗號,只有在金額至少有20個字符後,纔會匹配)。

1.2)使用參數preg_match()preg_match('/\$(\d+\.\d+)/',$message,$keywords,PREG_OFFSET_CAPTURE);。檢查print_r($keywords)以查看匹配值及其偏移量如何返回

您可能需要查找所有外觀。在這種情況下,使用preg_match_all()

+0

嗨,你能幫我把它放到https://regex101.com>。試圖學習正則表達式謝謝!這樣做時出現問題>< – CodeGuru 2014-12-08 10:15:15

+0

'preg_ *'PHP函數接受許多字符爲[regex delimiter](http://php.net/manual/en/regexp.reference.delimiters.php)。因爲你想匹配''/''我使用'#'作爲正則表達式分隔符來保持正則表達式更簡單(如果我使用'/''作爲分隔符,那麼我必須在正則表達式中引用它)。 https://regex101.com默認使用'/ /',但如果你點擊它,你可以使用其他字符作爲分隔符。 (f.e.''@'') – axiac 2014-12-08 10:32:08

2

試試這個:

$re = '~\$(\d+\.?\d+)/?(\w+)?~m'; 
$str = "$100000/hour\n$100.2000/min"; 

preg_match_all($re, $str, $matches); 
var_dump($matches); 

Demo on regex101

輸出

array (size=3) 
    0 => 
    array (size=2) 
     0 => string '$100000/hour' (length=12) 
     1 => string '$100.2000/min' (length=13) 
    1 => 
    array (size=2) 
     0 => string '100000' (length=6) 
     1 => string '100.2000' (length=8) 
    2 => 
    array (size=2) 
     0 => string 'hour' (length=4) 
     1 => string 'min' (length=3)