正则表达式从具有特殊字符的字符串中提取数字

时间:2012-05-10 11:17:36

标签: php regex

我有像

这样的字符串
  

8.123.351(此处有些文字)

我使用了正则表达式

/([0-9,]+(\.[0-9]{2,})+(\.[0-9]{2,})?)/

从字符串中取值“8.123.351”。它适用于上面给出的字符串。

但是当字符串没有“。”时它不起作用。例如“179(这里有些文字)”。 我修改了Regex以匹配此值,但没有成功。

所以任何人都可以建议我使用正则表达式从字符串中获取数字:

  1. 8.123.351(此处有些文字)
  2. 179(有些文字在这里)
  3. 179.123(有些文字在这里)
  4. 179.1(此处有些文字)

2 个答案:

答案 0 :(得分:1)

/([0-9]+[,\.]?)+/ 

匹配所有字符串

顺便说一句......您的RegEx需要一个匹配点,因为+表示一个或多个匹配。 *为0或更高,?为0或1

答案 1 :(得分:1)

你不是很清楚。我做了一些假设来创建一个模式。

  1. 数字位于字符串的开头
  2. 在有点之前至少有1位数字,最多3位数
  3. 现在我们创建你的表达

    1. 在行的开头匹配1到3位数

      /^\d{1,3}/
      
    2. 可选择(组后?)一个点和一到三个数字

      /^\d{1,3}(?:\.\d{1,3})?/
      
    3. 这个带点的部分可以重复0次或更多次(用?替换*

      /^\d{1,3}(?:\.\d{1,3})*/
      

      here on Regexr

    4. 如果您想阅读有关正则表达式的一些基础知识,I wrote a blog post about that