1

有一个字符串变量,其中包含带点的数字数据,例如$x = "OP/1.1.2/DIR";。数字数据的位置可以在任何情况下根据用户的需要在应用程序中修改,斜线可以被任何其他字符改变;但虚线数字数据是强制性的。1.1.2那么如何从字符串中提取点数数据呢?

4

1 回答 1

5

使用正则表达式

(\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"
}
于 2012-07-12T13:23:03.963 回答