1

我有一个文本字符串,其中有几个实例总是一个哈希,然后是一个数字(有时是标点符号),例如:

文字#12321,文字#456文字#789;文字#0!等等。

我需要正则表达式来 preg_match_all 每个数字(可变长度)在哈希之后但在任何不是数字之前 - 所以在上面的例子中我会得到一个数组:

' 12321''456''789''0 ' _ _ _ _ _ _

我试过:

'/[#](.*?)[^0-9]/'

'/(\\d+)(.*?)(\\d+)/'

但第一个以一种奇怪的方式失败,第二个只匹配其他实例。

我试图通过文档来迷惑我的方式,但了解如何最好地做到这一点会很有帮助。谁能节省我几个小时的困惑并告诉我正确的正则表达式语法吗?

4

2 回答 2

5

使用这个正则表达式: -

'/#(\d+)/'

你不需要non-number在最后检查。\d+无论如何只会让你得到数字,一旦遇到非数字就会停止。

请注意,这#不是正则表达式中的元字符,因此您不需要将其包含在字符类中。

于 2013-01-22T16:37:20.310 回答
0

您的第一次尝试列出:

'/[#](.*?)[^0-9]/'

似乎它会失败只是因为它消耗了一个额外的字符,这可能是下一个匹配的开始(如果你有一个像“#123#456”这样的字符串)。它非常接近,但这是:

'/#([0-9]+)/'

我相信应该可以正常工作。

于 2013-01-22T16:39:01.490 回答