2012-07-12 65 views
0

有一个字符串变量,包含带点的数字数据,如$x = "OP/1.1.2/DIR";。数字数据的位置可以在任何情况下通过用户需求在应用程序内部修改而改变,并且斜杠可以被任何其他字符改变;但点号数据是强制性的。那么如何从字符串中提取点号数据,这里是1.1.2如何获取字符串内的点数数据?

回答

4

使用regular expression

(\d+(?:\.\d+)*) 

击穿:

  • \d+找一个或多个数字
  • \.文字小数.字符
  • \d+后面跟着一个或多个数字再次
  • (...)*这意味着匹配0个或多个这种模式
  • (?:...)这告诉引擎不能创建此组反向引用的(基本上,我们不使用的参考,所以它是没有意义的有一个)

您还没有给出关于数据的大量信息,所以我做了以下假设:

  • 数据将始终包含至少一个数字
  • 数据可能只包含一个数字,没有点
  • 数据可能包含多位数
  • 数字本身可以包含任意数量的点/位对

如果这些假设是不正确的,你就必须修改正则表达式。

实例:

$x = "OP/1.1.2/DIR"; 

if (!preg_match('/(\d+(\.\d+)*)/', $x, $matches)) { 
    // Could not find a matching number in the data - handle this appropriately 
} else { 
    var_dump($matches[1]); // string(5) "1.1.2" 
} 
+1

' '/(\ d +(?:\。\ d +)*)/''消耗更少的存储器。 – Florent 2012-07-12 13:28:35

+0

@Florent:谢谢你的发现。我会在细节上补充一点。 – FtDRbwLXw6 2012-07-12 13:32:13

+0

它是否总是在$ matches [1]中获取数据?或者我可以在$匹配[0]获得它? – pheromix 2012-07-12 13:34:27

相关问题