有一个字符串变量,包含带点的数字数据,比如$x = "OP/1.1.2/DIR";
。数字数据的位置可以根据用户的意愿在任何情况下通过在应用程序中修改来改变,斜线可以通过任何其他字符来改变;但是虚线数字数据是强制性的。那么,如何从字符串中提取虚线数据,这里是1.1.2
?
使用正则表达式:
('d+(?:'.'d+)*)
细分:
'd+
查找一个或多个数字'.
一个文字十进制.
字符'd+
后面再跟一个或多个数字(...)*
这意味着匹配该模式的0次或多次出现(?:...)
这告诉引擎不要为这个组创建一个backreference(基本上,我们不使用这个引用,所以没有意义)
你没有给出太多关于数据的信息,所以我做出了以下假设:
- 数据将始终至少包含一个数字
- 数据可能只包含一个没有点的数字
- 数据可能包含多位数
- 数字本身可以包含任意数量的点/数字对
如果这些假设中的任何一个都不正确,则必须修改正则表达式。
示例用法:
$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"
}