rsk*_*k82 15 php regex preg-match
例:
$string = "This is some text written on 2010-07-18.";
preg_match('|(?<date>\d\d\d\d-\d\d-\d\d)|i', $string, $arr_result);
print_r($arr_result);
Run Code Online (Sandbox Code Playgroud)
返回:
Array
(
[0] => 2010-07-18
[date] => 2010-07-18
[1] => 2010-07-18
)
Run Code Online (Sandbox Code Playgroud)
但我希望它是:
Array
(
[date] => 2010-07-18
)
Run Code Online (Sandbox Code Playgroud)
在PHP的PDO对象中,有一个选项可以通过删除这些重复的编号值来过滤数据库中的结果:PDO::FETCH_ASSOC.但我还没有看到PHP中PCRE函数的类似修饰符.
hak*_*kre 11
preg_match没有任何标志或选项,它只返回命名匹配(尚).所以你想要的不是直接的.但是,您可以从匹配数组中删除所有带有非拟合键的项目,然后获得您要查找的内容:
$matches = array_intersect_key($matches, array_flip(array('name', 'likes')));
Run Code Online (Sandbox Code Playgroud)
Jen*_*och 11
如何只返回带有preg_match或preg_match_all的命名组?
这是目前(PHP7)不可能的.您将始终获得包含数字和命名键的混合类型数组.
让我们引用PHP手册(http://php.net/manual/en/regexp.reference.subpatterns.php):
然后,此子模式将通过其正常数字位置和名称在matches数组中编制索引.
要解决此问题,以下代码段可能会有所帮助:
1.使用数组键上的is_string检查过滤数组(对于PHP5.6 +)
$array_filtered = array_filter($array, "is_string", ARRAY_FILTER_USE_KEY);
Run Code Online (Sandbox Code Playgroud)
2. foreach over the elements and unset if array key is_int()(所有PHP版本)
/**
* @param array $array
* @return array
*/
function dropNumericKeys(array $array)
{
foreach ($array as $key => $value) {
if (is_int($key)) {
unset($array[$key]);
}
}
return $array;
}
Run Code Online (Sandbox Code Playgroud)
它是一个简单的PHP函数命名dropNumericKeys().它用于在preg_match*()使用命名组进行匹配的运行之后对匹配数组进行后处理.这些函数接受了$array.它迭代数组并删除/取消设置整数类型的所有键,保持字符串类型的键不变.最后,该函数返回带有"now"的数组,只有命名键.
注意:该函数用于PHP向下兼容性.它适用于所有版本.该array_filter解决方案依赖于常量ARRAY_FILTER_USE_KEY,仅在PHP5.6 +上可用.见http://php.net/manual/de/array.constants.php#constant.array-filter-use-key
| 归档时间: |
|
| 查看次数: |
10940 次 |
| 最近记录: |