PHP中大括号之间的匹配文本

Posted

技术标签:

【中文标题】PHP中大括号之间的匹配文本【英文标题】:Matching text between braces in PHP 【发布时间】:2011-06-19 08:34:41 【问题描述】:

直接跟进之前的question,我如何使用 php 将文本(如果可能的话,以及大括号)作为匹配项提取出来?

具体来说,我正在编写一个 Wordpress 插件,并希望重新格式化两个大括号之间的所有文本(准 wiki 标记)。

我已经按照我之前问过的另一个 question 中概述的步骤进行操作,并且 matching 部分正在工作 - 这是我需要帮助的 match。 p>

例子:

This is some text and I want to reformat the items inside the curly braces

期望的输出:

This is some *Text fancified* and I want to reformat the items inside the curly braces

我所拥有的(即工作):

$content = preg_replace('#\b\\`.+`\\\b#', "<strong>$0</strong>", $content);

如果匹配包括大括号太难,我可以使用大括号作为偏移量进行匹配,然后也可以使用更简单的文本匹配函数删除“违规”大括号。

【问题讨论】:

【参考方案1】:
$content = preg_replace('/([^]*)/', "<strong>$1</strong>", $content);

【讨论】:

你需要改变 something ,所以你把 ,现在你需要用 (.*) 得到里面的东西,但你不需要里面的东西是 或 ,所以你只需说 (除 或 之外的任何内容) .. 不喜欢 [ 或 ] = ^[|] 。我很讨厌解释事情,只要我完成工作,我的老板就不会在意...... [^|] 应该只是 [^]。字符类中不需要“或”运算符,因此| 失去了它的特殊含义,只匹配|【参考方案2】:

你需要使用(圆括号)组成一个匹配组。

preg_replace('#\\(.+?)\\#', "<strong>$1</strong>",

无论(.+?) 匹配什么,都可以在替换字符串中用作$1。这样,您就可以将封闭的 和 排除在外。 \b 也是多余的。

【讨论】:

我从未听说过称为“圆括号”的括号。但除此之外,+1 @warren:Ronans 匹配模式更能抵御错误混合的大括号。虽然.+? 通常足以匹配最短的字符串,但[^]+ 否定字符类是更专业的习语。但是,在您的情况下,我认为它可以互换。

以上是关于PHP中大括号之间的匹配文本的主要内容,如果未能解决你的问题,请参考以下文章

算法题:括号匹配(小中大括号序列)

如果前缀是非常大的文件中的某个字符串,则在括号之间获取/匹配文本[关闭]

正则表达式查找字符串中大括号内的任何标签

Java中大括号的作用是啥?

php正则:匹配(),{},[]小括号,大括号,中括号里面的内容

请教JAVA中大括号的用法.