2014-12-06 105 views
1

的模式我有一些圖案,我試圖做...一個問題,這是我的代碼:我一直在努力爲這個傢伙內找到長字符串

$test = 'this is a simply test'; 

preg_match_all("/^this is a [a-zA-Z] test$/", $test, $op_string); 

print_r($op_string); 

,但這不能正常工作。這應該輸出:simply

該模式必須包含相同的$test(字符串我的意思是......它不能只包含[a-zA-Z],因爲我們需要更精確地找到它) 。

非常感謝!

回答

1

嘗試:

$re = "/^this is a ([a-zA-Z\\s]+) test$/m"; 
$str = "this is a simply test"; 

preg_match_all($re, $str, $matches); 
var_dump($matches[1]); // here you get match word or word set 

live demo

輸出:

array (size=1) 
    0 => string 'simply' (length=6) 
+0

這個作品真棒!謝謝! – user3795437 2014-12-06 10:01:46

+0

@ user3795437也謝謝。 – 2014-12-06 10:03:19

+0

'([a-zA-Z \ s] +)'實際上是錯誤的正則表達式匹配'只需' – anubhava 2014-12-06 10:11:11

2

使用量詞+匹配1個或多個字母:

$test = 'this is a simply test'; 
preg_match_all('/^this is a [a-zA-Z]+ test$/', $test, $op_string); 

您使用[a-zA-Z]將只匹配單個字母

+0

你好@anubhava,它返回這個: '陣列([0] =>數組( [0] =>這是一個簡單的測試))'這應該返回一個數組與「簡單」...我是嗎?謝謝! – user3795437 2014-12-06 10:00:05

+0

如果你只是想簡單地在一個被捕獲的組中使用:'preg_match_all('/ ^這是一個([a-zA-Z] +)test $ /',$ test,$ op_string);'然後使用' $ op_string [1]' – anubhava 2014-12-06 10:01:41

+0

沒有使用捕獲的組,你可以使用像這樣的lookahead:'preg_match_all('/(?<=^this是a)[a-zA-Z] +(?= test $)/',$測試,$ op_string);' – anubhava 2014-12-06 10:03:40