【问题标题】:Regex/PHP to grab numbers between a hash and any non-number?正则表达式/PHP 在哈希和任何非数字之间获取数字?
【发布时间】:2013-01-22 16:35:41
【问题描述】:

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

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

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

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

我试过了:

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

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

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

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

【问题讨论】:

  • 这应该可以工作 '/\d+/'

标签: php regex


【解决方案1】:

使用这个正则表达式:-

'/#(\d+)/'

您无需在最后检查non-number\d+ 无论如何只会让你得到数字,并且会在遇到 non-digit 时立即停止。

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

【讨论】:

  • 效果很好!谢谢你向我解释。
【解决方案2】:

列出您的第一次尝试:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多