PHP preg_replace - 正则表达式

Posted

技术标签:

【中文标题】PHP preg_replace - 正则表达式【英文标题】:PHP preg_replace - regex 【发布时间】:2012-02-09 16:45:09 【问题描述】:

我仍在研究正则表达式并一点一点地学习。这个让我头疼。我有一个类似下面的字符串:

".......mapsearch"), '52.486683, -4.044363', options......"

我想从字符串中检索 2 个数字(long 和 lat)——我不介意我是否将它们作为一个完整的字符串一起检索,中间包含逗号和空格。

我知道我想使用表达式来匹配并忽略从开始到 mapsearch"), ' 的任何内容,包括字符串的结尾到 ', options 模式。

更新

该字符串还将包含一系列其他字符,例如 ( ) = : / 以及所需匹配前后的数字..

【问题讨论】:

为什么不在,上爆炸,然后循环检查它是否是一个浮点数/整数来保留它? 字符串中只有这两个数字吗? 这是 CSV 文件中的一行吗?你最好使用解析器。 @将发布更长的字符串。 【参考方案1】:

这会起作用,尽管它很丑:

/mapsearch\"\), '(-?\d+(?:\.\d+)?), (-?\d+(?:\.\d+)?)', options/

数字可以是负数或正数,也可以匹配整数和十进制值。该模式会将这两个数字作为一个单独的组返回。

【讨论】:

(-?\d+(?:.\d+)?) 工作原理的细分:-? 查找一个可选的前导负号,后跟多个数字 (\d+)。在最初的一组数字之后,我们想要匹配一个小数和一个数字的数量((?:.\d+)?),但我们不希望它是它自己的捕获组(?:)。 返回一个包含 3 个项目的数组 - 其中第一个,第二个和第三个返回每个变量 - 仍然有效。谢谢。 preg_match(以及我见过的大多数其他正则表达式匹配器)将始终将完整匹配作为第一组返回。这就是为什么有 3 个项目。【参考方案2】:
preg_match("/'([^,]+), ([^']+)'/", $string, $matches);
echo $matches[0]; // 52.486683
echo $matches[1]; // -4.044363

【讨论】:

【参考方案3】:

假设它是单引号中唯一的数字:

'-?\d+.\d+, -?\d+.\d+'

【讨论】:

【参考方案4】:

你可以试试这个:

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

提取

52.486683,-4.044363

【讨论】:

【参考方案5】:

在这种情况下,我会使用 metalfrog 的解决方案并进行一些更改。

如果你确定只有字符串有逗号,没有别的,然后分解,检查它是否是整数/浮点数,或者如果你知道它是第 n 项,只需获取 $array[$n]。

否则爆炸并使用this(需要一些编辑)来确定它是否是一个坐标。

【讨论】:

【参考方案6】:
$subject = ".....mapsearch\"), '52.486683, -4.044363', options......";
$regex = '/mapsearch\"\), \'(-?[0-9]1,3\.[0-9]6, -?[0-9]1,3\.[0-9]6)\', options/';
if (preg_match($regex, $subject, $matches))
    print_r($matches);

这会给你:

Array
(
    [0] => mapsearch"), '52.486683, -4.044363', options
    [1] => 52.486683, -4.044363
)

【讨论】:

以上是关于PHP preg_replace - 正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

PHP中使用正则表达式详解 preg_match() preg_replace() preg_mat

php 中preg_replace执行一个正则表达式的搜索和替换

PHP 删除/替换 - href / anchor / link - 在html / string中 - preg_replace - php - regex - 正则表达式

php正则替换函数-----preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1

php 中文标点逗号‘,’怎么用正则匹配

我在字符串上有几个 preg_replace 未知修饰符警告,但我不知道正则表达式修复 [重复]