2014-11-05 35 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" 
}