2013-02-18 185 views
9

好的,所以我一直在摔跤這個正則表達式的年齡,我不能得到它的工作。PHP的正則表達式匹配詞

我想要做什麼:

給定一個字符串我想字符串包含單詞的數組,每個任何非單詞字符之後。

實施例的輸入字符串:

one "two" (three) -four-

字符串中的詞語可以是任何東西,甚至亂碼,標點符號或符號的任何量。

我想看到什麼:

array: 
one 
"two 
" (three 
) -four 
-

從本質上講,每場比賽的最後一件事是一個詞,被任何東西從以前的比賽遺留下來之前。我嘗試了preg_match_all()和preg_split()的各種組合,其中包含許多「\ w」,「\ b」,「[^\ w]「等等。

更大的圖片

基本上我只是想將一個*字符串供搜索中的每個單詞後。

我真的不是一個正則表達式的人,所以幫助表示讚賞!

+0

在你的*我想看到的*部分,是'四'應該是在下一行後的報價? – LeonardChallis 2013-02-18 17:48:51

+0

你是對的,當我發佈時引號似乎已經改變,我現在已經修復了,希望他們這次能夠正確地通過。 – Testic 2013-02-18 17:54:36

回答

8

如果你只是想每一個 「字」 後添加一個星號,你可以這樣做:

<?php 
$test = 'one "two" (three) -four-'; 

echo preg_replace('/(\w+)/', "$1*", $test); 
?> 

http://phpfiddle.org/main/code/8nr-bpb

+0

這也很出色!我可能會使用這個,因爲它可以幫助我避免在比賽中循環。 – Testic 2013-02-18 18:03:15

7

可以使用負先行拆分單詞邊界,就像這樣:

$array = preg_split('/(?!\w)\b/', 'one "two" (three) -four-'); 

一個print_r($array);gives you所需的精確輸出:

Array 
(
    [0] => one 
    [1] => "two 
    [2] => " (three 
    [3] =>) -four 
    [4] => - 
)
+0

這工作出色! – Testic 2013-02-18 18:02:02

0

這裏的如何找到一個字一個例子與PHP中的正則表達式。

<?php 
$subject = "abcdef"; 
$pattern = '/^def/'; 
preg_match($pattern, substr($subject,3), $matches, PREG_OFFSET_CAPTURE); 
print_r($matches); 
?> 
0

另一種

[^\w]*(\b\w*\b)? 
----- ---------- 
|  | 
|  |->matches a word 0 or 1 time 
|->matches 0 to many characters except [a-zA-Z0-9_] 

你需要匹配!