php - 如何从 PHP 中的括号之间获取所有内容?

标签 php regex arrays string preg-match

Array(
[1] => put returns (between) paragraphs
[2] => (for) linebreak (add) 2 spaces at end
[3] => indent code by 4 (spaces!)
[4] => to make links
)

想要获取括号内的文本(对于每个值):

  1. 只参加第一场比赛
  2. 从值中删除此匹配项
  3. 将所有匹配项写入新数组

After 函数数组应该如下所示:

Array(
[1] => put returns paragraphs
[2] => linebreak (add) 2 spaces at end
[3] => indent code by 4
[4] => to make links
)
Array(
[1] => between
[2] => for
[3] => spaces!
[4] => 
)

解决方案是什么?

最佳答案

我会使用正则表达式 /\((\([^()]*\)|[^()]*)\)/(这将匹配一对或两对括号)连同 preg_split :

$matches = array();
foreach ($arr as &$value) {
    $parts = preg_split('/\((\([^()]*\)|[^()]*)\)/', $value, 2, PREG_SPLIT_DELIM_CAPTURE);
    if (count($parts) > 1) {
        $matches[] = current(array_splice($parts, 1, 1));
        $value = implode('', $parts);
    }
}

使用带有 PREG_SPLIT_DELIM_CAPTURE 标志集的 preg_split 将在结果数组中包含匹配的分隔符。于是找到了匹配,至少有三部分。在那种情况下,第二个成员就是我们正在寻找的那个。该成员被删除 array_splice这也确实返回了已删除成员的数组。要获取已删除的成员,current用于 array_splice 的返回值。然后将其余成员放回原处。

关于php - 如何从 PHP 中的括号之间获取所有内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3667816/

相关文章:

php - 通过 PHPmailer 发送 HTML 表格

php - WooCommerce 按 id 从循环中删除产品

php - 插入mysql不完整值字段

java - 这是解析字符串的最有效方法吗?

javascript - 多维 Javascript 数组到 Php 页面

c - 数组数据类型内存分配

java - OWL中的CRUD操作

javascript - 正则表达式字符串捕获javascript

javascript - Rangey如何在没有符号的情况下扩展?

arrays - 在 R 中的 3 维数组上并行化嵌套 for 循环