Php,Regex,字符串之间

Php,Regex,字符串之间,php,regex,Php,Regex,我试图找到以下场景的模式: 假设我有这个字符串: someString[code]somecode[/code]someString 现在一些代码可以是任何东西,我想得到的是保留字(break、class等),所以对于真实场景,这是一个字符串: someString [code] class someClass{} [/code] someString // And again someString [code] class someClass{} [/code] someString 因

我试图找到以下场景的模式:

假设我有这个字符串:

someString[code]somecode[/code]someString

现在一些代码可以是任何东西,我想得到的是保留字(break、class等),所以对于真实场景,这是一个字符串:

someString
[code]
class someClass{}
[/code]
someString

// And again

someString
[code]
class someClass{}
[/code]
someString
因此,我试图理解的是如何匹配所有[code][/code]标记之间的所有保留字

例如:
[code]someReservedWord一些文本另一个reservedword[/code]
我只想匹配someReservedWord和另一个reservedword

我想用preg\u match\u all这样我就可以在每个[code][/code]中获取所有保留字,并使用preg\u OFFSET\u CAPTURE获取它们的位置

我唯一搞不懂的是模式,如果有人知道了,我会非常感激,谢谢大家,祝你们过得愉快。

$str=“someString[code]somescode[/code]someString”;
$str = "someString[code]some code[/code]someString";
$ret = preg_replace('#\[code\](.+)\[\/code\]#iUs', '<FOUND>$1</FOUND>', $str);
var_dump($ret);
$ret=preg\u replace(“\[code\]”(.+)\[\/code\]\iUs'、“$1'、$str”); var_dump($ret); (,参见preg_match_all示例)

您可能会在谷歌上搜索BB代码PHP正则表达式。

$str=“someString[Code]some Code[/Code]someString”; $ret=preg\u replace(“\[code\]”(.+)\[\/code\]\iUs'、“$1'、$str”); var_dump($ret); (,参见preg_match_all示例)

您可能会在谷歌上搜索BB代码PHP正则表达式。

$str=“someString[Code]some Code[/Code]someString”; $ret=preg\u replace(“\[code\]”(.+)\[\/code\]\iUs'、“$1'、$str”); var_dump($ret); (,参见preg_match_all示例)

您可能会在谷歌上搜索BB代码PHP正则表达式。

$str=“someString[Code]some Code[/Code]someString”; $ret=preg\u replace(“\[code\]”(.+)\[\/code\]\iUs'、“$1'、$str”); var_dump($ret); (,参见preg_match_all示例)

您可能会在谷歌上搜索BB代码PHP正则表达式。

您可以使用:

$pattern = <<<'LOD'
~ (?(DEFINE) (?<words> class | string | function ) )

(?: \[code] | \G(?<!^) )
(?: [^[]+? | \[(?!/code]) )*? \K
\b \g<words> \b

~x
LOD;

preg_match_all($pattern, $subject, $matches, PREG_OFFSET_CAPTURE);

print_r($matches[0]);
$pattern=模式详细信息:

首先,我们定义一个包含所有保留字的命名组:

(?(DEFINE) (?<words> class | string | function ) )
(?(定义)(?类|字符串|函数))
(?(DEFINE)…)
语法允许在模式本身之外定义子模式。您可以稍后在模式中使用
\g
调用命名组“words”

(?:[^[]+?\[(?!/code])*?
描述保留字之前的所有内容。此子模式可以匹配除结束标记之外的所有内容
[/code]
,因为您可以在“所有非a[”或“a[不后跟
/code>”之间进行选择。因为它可以匹配所有内容,所以当遇到保留字时,使用惰性量词停止匹配

模式的入口点是
(?:\[code]|\G(?。这将强制匹配以
[code]
标记开始,或与先前匹配相邻

\G
是一个锚点,意思是:“在字符串的开头或与前一个匹配项相邻”。使用反向查找
(?)时,禁止字符串的开头。)

\K
是一种从匹配结果中重置之前所有匹配内容的技巧。

您可以使用以下方法:

$pattern = <<<'LOD'
~ (?(DEFINE) (?<words> class | string | function ) )

(?: \[code] | \G(?<!^) )
(?: [^[]+? | \[(?!/code]) )*? \K
\b \g<words> \b

~x
LOD;

preg_match_all($pattern, $subject, $matches, PREG_OFFSET_CAPTURE);

print_r($matches[0]);
$pattern=模式详细信息:

首先,我们定义一个包含所有保留字的命名组:

(?(DEFINE) (?<words> class | string | function ) )
(?(定义)(?类|字符串|函数))
(?(DEFINE)…)
语法允许在模式本身之外定义子模式。您可以稍后在模式中使用
\g
调用命名组“words”

(?:[^[]+?\[(?!/code])*?
描述保留字之前的所有内容。此子模式可以匹配除结束标记之外的所有内容
[/code]
,因为您可以在“所有非a[”或“a[不后跟
/code>”之间进行选择。因为它可以匹配所有内容,所以当遇到保留字时,使用惰性量词停止匹配

模式的入口点是
(?:\[code]|\G(?。这将强制匹配以
[code]
标记开始,或与先前匹配相邻

\G
是一个锚点,意思是:“在字符串的开头或与前一个匹配项相邻”。使用反向查找
(?)时,禁止字符串的开头。)

\K
是一种从匹配结果中重置之前所有匹配内容的技巧。

您可以使用以下方法:

$pattern = <<<'LOD'
~ (?(DEFINE) (?<words> class | string | function ) )

(?: \[code] | \G(?<!^) )
(?: [^[]+? | \[(?!/code]) )*? \K
\b \g<words> \b

~x
LOD;

preg_match_all($pattern, $subject, $matches, PREG_OFFSET_CAPTURE);

print_r($matches[0]);
$pattern=模式详细信息:

首先,我们定义一个包含所有保留字的命名组:

(?(DEFINE) (?<words> class | string | function ) )
(?(定义)(?类|字符串|函数))
(?(DEFINE)…)
语法允许在模式本身之外定义子模式。您可以稍后在模式中使用
\g
调用命名组“words”

(?:[^[]+?\[(?!/code])*?
描述保留字之前的所有内容。此子模式可以匹配除结束标记之外的所有内容
[/code]
,因为您可以在“所有非a[”或“a[不后跟
/code>”之间进行选择。因为它可以匹配所有内容,所以当遇到保留字时,使用惰性量词停止匹配

模式的入口点是
(?:\[code]|\G(?。这将强制匹配以
[code]
标记开始,或与先前匹配相邻

\G
是一个锚点,意思是:“在字符串的开头或与前一个匹配项相邻”。使用反向查找
(?)时,禁止字符串的开头。)

\K
是一种从匹配结果中重置之前所有匹配内容的技巧。

您可以使用以下方法:

$pattern = <<<'LOD'
~ (?(DEFINE) (?<words> class | string | function ) )

(?: \[code] | \G(?<!^) )
(?: [^[]+? | \[(?!/code]) )*? \K
\b \g<words> \b

~x
LOD;

preg_match_all($pattern, $subject, $matches, PREG_OFFSET_CAPTURE);

print_r($matches[0]);
$pattern=模式详细信息:

首先,我们定义一个包含所有保留字的命名组:

(?(DEFINE) (?<words> class | string | function ) )
(?(定义)(?类|字符串|函数))
(?(DEFINE)…)
语法允许在模式本身之外定义子模式。您可以稍后在模式中使用
\g
调用命名组“words”

(?:[^[]+?\[(?!/code]))*?
descripb