如何找到';用户定义的标签';使用正则表达式


How can I find a 'user defined tag' using a regular expression?

所以我确实对正则表达式很不满意,所以如果有人能在这方面帮我一点,无论是在弄清楚如何执行特定搜索方面;还有应用正则表达式的实际工作方式,我会欣喜若狂。

我试图在我正在构建的PHP框架中实现"用户可修改标记"的放置/替换。

示例如下:

$ReplacementOpenTag = "[{";
$ReplacementCloseTag = "}]";
$SomeRegex = "$ReplacementOpenTag(...)$ReplacementCloseTag";
$Matches = array();
if( preg_match_all($ReplacementSubject,$SomeRegex,&$Matches) <= 0 )
    return;
else
    foreach( $Matches as $Match ) // <--- Match?
        echo($Match[0]); // <--- Right?

用户可以将打开和关闭标签设置为-"<{"或"[|"(如果愿意的话)-以防出于某种原因,我的"标准"标签不适合他们的需求。

现在。。。我觉得这似乎太容易了——但过了一段时间,我在http://tryphpregex.com/简单地说,我想是时候看看我是否能快速简单地解决这个大概是简单的正则表达式了,这样我就可以对它进行剖析,找出我缺少的东西。

我觉得应该有一个"愚蠢的问题"标签。。。

首先,转义分隔符,因为它们可能包含特殊字符(在您的示例中,它们确实包含):

$ReplacementOpenTag = preg_quote($ReplacementOpenTag);
$ReplacementCloseTag = preg_quote($ReplacementCloseTag);

接下来,构建一个正则表达式,在分隔符之间使用非自由模式:

$SomeRegex = "/$ReplacementOpenTag(.*?)$ReplacementCloseTag/s";

然后,就像这个一样使用它

preg_match_all($SomeRegex, $ReplacementSubject, $Matches);

或者,对于替换:

preg_replace($SomeRegex, "<b>$1</b>", $ReplacementSubject);