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中大括号之间的匹配文本的主要内容,如果未能解决你的问题,请参考以下文章
如果前缀是非常大的文件中的某个字符串,则在括号之间获取/匹配文本[关闭]