2014-11-05 65 views
-1

我有以下的正則表達式的是我試圖檢測#x中,x是一個數字。當比賽2中沒有任何東西出現時,我能夠讓它工作,但是如果有的話就會中斷。有人可以幫助我如何使這項工作兩種方式?PHP正則表達式,用於檢測#NUMBER

/(\G|\s+|^)#(\d+)((?=\s+)|(?=::)|$)/i 

將與線

This is a test #1234 end test 

工作,但不會與

This is a test #1234end test 
This is a test#1234 end test 
This is a test.#1234 end test 
This is a test #1234. End test 

工作的人知道什麼需要改變,以實現這一目標?

編輯,我試圖讓任何東西,但字母數字在第三組,現在有::和空白。有沒有辦法將這些組合成1,而不是檢測字母或數字

+6

爲什麼不使用'/#(\ d +)/'? – anubhava 2014-11-05 17:22:25

+2

您的嘗試建議您有一些負面情況。 **你不想匹配什麼? – bishop 2014-11-05 17:24:22

回答

0
(\G|\s+|^)#(\d+)((?=[^[:alnum:]])|$) 

我想保持三組,我不得不,但我只改變了第3組。我從第三組中刪除了::和\ S空白字符,並且只添加了一個簡單的非字母數字檢查,因爲它也包含這兩個條件。

(\G|\s+|^) 
#(\d+) 
((?=[^[:alnum:]])|$) 

[^[:alnum:]] 
+0

此答案位於低質量帖子評論隊列中,因爲它只是沒有解釋的代碼。請通過解釋您的代碼的作用以及它如何回答問題來改進您的答案。請閱讀[有關回答編程問題的建議](http://msmvps.com/blogs/jon_skeet/archive/2009/02/17/answering-technical-questions-helpfully.aspx)。 – 2014-11-05 19:48:50

+0

@AdiInbar就像這是一個http://stackoverflow.com/a/26759844/這不應該給予更高的代表任何優惠待遇。那傢伙幾乎從來沒有在他的答案中給出任何解釋。 – 2014-11-06 08:20:09

+0

@弗雷德-II-我不太清楚你想要說些什麼,但是這是我的股票評論時,我遇到一個LQP評論,只有代號的答案。有些代碼只根據其性質做出回答並不需要解釋,因爲他們解決問題的方式是不言而喻的,但我認爲這種情況並非如此。以下是我如何回答正則表達式問題的最新示例:http://stackoverflow.com/a/26575011/1248365。無論如何,我是否離開這種評論評論並不取決於海報代表的高度。 – 2014-11-06 15:23:39

2

運行使用/#\d+/i應該得到你所期待的一個預浸比賽。因此,運行以下:

$items = [ 
    "This is a test #1234end test", 
    "This is a test#1234 end test", 
    "This is a test.#1234 end test", 
    "This is a test #1234. End test" 
]; 

foreach($items as $test){ 
    preg_match("/#\d+/i", $test, $matches); 
    var_dump($matches); 
} 

你會得到這樣的結果:

array(1) { 
    [0]=> 
    string(5) "#1234" 
} 
array(1) { 
    [0]=> 
    string(5) "#1234" 
} 
array(1) { 
    [0]=> 
    string(5) "#1234" 
} 
array(1) { 
    [0]=> 
    string(5) "#1234" 
} 

如果你不想在結果中#,那麼你可以再做的/#(\d+)/i

子模式然後將導致以下結果:

array(2) { 
    [0]=> 
    string(5) "#1234" 
    [1]=> 
    string(4) "1234" 
} 
array(2) { 
    [0]=> 
    string(5) "#1234" 
    [1]=> 
    string(4) "1234" 
} 
array(2) { 
    [0]=> 
    string(5) "#1234" 
    [1]=> 
    string(4) "1234" 
} 
array(2) { 
    [0]=> 
    string(5) "#1234" 
    [1]=> 
    string(4) "1234" 
}