Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在[LOOP]…[/LOOP]之间获取字符串_Php_Regex - Fatal编程技术网

Php 如何在[LOOP]…[/LOOP]之间获取字符串

Php 如何在[LOOP]…[/LOOP]之间获取字符串,php,regex,Php,Regex,如何在[LOOP]…[/LOOP]之间获取字符串 我试过了,但没用 $gloop = preg_replace('/\[LOOP\]([^\[]*)\[\/LOOP\]/', '\\1', $var); 。。。 字符串: ' [循环]%Gdata_All%[/LOOP] ' 但是我会在[LOOP]…[/LOOP]中插入字符串,我首先想说,您是否正在创建自己的模板库?有一些成熟的,比如应该能够满足你的要求。杰夫·阿特伍德(Jeff Atwood)的这篇文章也读得很好:“这是一篇很好的文章。”

如何在[LOOP]…[/LOOP]之间获取字符串 我试过了,但没用

$gloop = preg_replace('/\[LOOP\]([^\[]*)\[\/LOOP\]/', '\\1', $var);
。。。 字符串:

'
[循环]%Gdata_All%[/LOOP]
'

但是我会在[LOOP]…[/LOOP]

中插入字符串,我首先想说,您是否正在创建自己的模板库?有一些成熟的,比如应该能够满足你的要求。杰夫·阿特伍德(Jeff Atwood)的这篇文章也读得很好:“这是一篇很好的文章。”

如果您想推出自己的解决方案,那么这很好,这里有一些建议

代码
此方法依赖于在PHP中安装BBCode扩展,它是本机的,不依赖正则表达式引擎(slow)。这个解决方案可能是最快的

您可以让BBCode解析器进行转换

[LOOP]<td><?php print $row->title; ?></td>[/LOOP]
然后可以按如下方式使用它

if (preg_match('%\[LOOP\]((?:[^[]+|\[(?=/LOOP\]))*)\[/LOOP\]%i', $subject, $result)) {
    # Successful match
    # You can access the content using $result[1];
} else {
    # Match attempt failed
}

-Mathew

我首先想说,您是否正在创建自己的模板库?有一些成熟的,比如应该能够满足你的要求。杰夫·阿特伍德(Jeff Atwood)的这篇文章也读得很好:“这是一篇很好的文章。”

如果您想推出自己的解决方案,那么这很好,这里有一些建议

代码
此方法依赖于在PHP中安装BBCode扩展,它是本机的,不依赖正则表达式引擎(slow)。这个解决方案可能是最快的

您可以让BBCode解析器进行转换

[LOOP]<td><?php print $row->title; ?></td>[/LOOP]
然后可以按如下方式使用它

if (preg_match('%\[LOOP\]((?:[^[]+|\[(?=/LOOP\]))*)\[/LOOP\]%i', $subject, $result)) {
    # Successful match
    # You can access the content using $result[1];
} else {
    # Match attempt failed
}

-Mathew

我将使用以下正则表达式:

/\[LOOP]((?:[^[]+|\[(?=\/LOOP]))*)\[\/LOOP]/
它匹配除
[
[^[]+
)或后面没有
/LOOP]
\[(?!\/LOOP])
(?!
expr
)的
[/code>字符序列以外的任何字符序列。
[LOOP]
/LOOP]
之间的一个否定的先行断言;
>(?:
expr
是非捕获分组


但是,如果您像前面指出的那样使用真正的解析器来检测格式错误的代码肯定会更好。

我将使用以下正则表达式:

/\[LOOP]((?:[^[]+|\[(?=\/LOOP]))*)\[\/LOOP]/
它匹配除
[
[^[]+
)或后面没有
/LOOP]
\[(?!\/LOOP])
(?!
expr
)的
[/code>字符序列以外的任何字符序列。
[LOOP]
/LOOP]
之间的一个否定的先行断言;
>(?:
expr
是非捕获分组


但是,如果您像前面指出的那样使用真正的解析器来检测格式错误的代码肯定会更好。

与(.*)匹配。它仍然会匹配“[LOOP]…[LOOP]…[/LOOP]”。我认为OP的这一部分是正确的:([^]]*)。当然,假设标签中没有括号。但这是一个次要问题;真正的问题在于尝试使用preg_replace而不是preg_match。+1Ah是的,很好。Gumbo在下面发布的正则表达式解决了这个问题。使用(.*)。它仍然会匹配“[LOOP]…[LOOP]…[/LOOP]”。我认为OP的这部分是正确的:([^]]*)。当然,假设标签中没有括号。但这是一个次要问题;真正的问题在于尝试使用preg_replace而不是preg_match。+1Ah是的,很好。Gumbo在下面发布的正则表达式解决了这个问题。请看一看我编写的一个短代码/BBCode库:。它使这些事情变得更容易要做。请看一看我编写的shortcode/BBCode库:。它使这样的事情更容易做。