提取大括号正则表达式 php 之间的所有值

2022-08-30 22:45:35

我有此表单中的内容

$content ="<p>This is a sample text where {123456} and {7894560} ['These are samples']{145789}</p>";

我需要数组中大括号之间的所有值,如下所示:

array("0"=>"123456","1"=>"7894560","2"=>"145789")

我尝试了以下代码:

<?php
preg_match_all("/\{.*}\/s", $content, $matches);
?>

但是我在这里输入的值从第一个大括号到内容中的最后一个。可以做些什么来获得上述格式的数组?我知道我使用的模式是错误的。为了获得上面显示的所需输出,应提供什么?


答案 1

喜欢这个...

<?php
$content ="<p>This is a sample text where {123456} and {7894560} ['These are samples']{145789}</p>";
preg_match_all('/{(.*?)}/', $content, $matches);
print_r(array_map('intval',$matches[1]));

输出:

Array
(
    [0] => 123456
    [1] => 7894560
    [2] => 145789
)

答案 2

没有提到两个紧凑的解决方案:

(?<={)[^}]*(?=})

{\K[^}]*(?=})

这些允许您直接访问匹配项,而无需捕获组。例如:

$regex = '/{\K[^}]*(?=})/m';
preg_match_all($regex, $yourstring, $matches);
// See all matches
print_r($matches[0]);

解释

  • Lookbehind断言前面的是一个左大括号。(?<={)
  • 在选项 2 中,匹配左大括号,然后告诉引擎放弃到目前为止匹配的内容。 在 Perl、PHP 和 R(使用引擎)和 Ruby 2.0+ 中可用{\K\KPCRE
  • 否定字符类表示一个不是右大括号的字符,[^}]
  • 并且量词匹配零次或多次*
  • 前瞻断言接下来是一个右大括号。(?=})

参考


推荐