[[和]]之间的PHP正则表达式preg_match_all()
我想使用preg_match_all()提取[[和]]之间的内容,但忽略[[和]]],因此,例如以下文本:[[和]]之间的PHP正则表达式preg_match_all(),php,regex,preg-match-all,Php,Regex,Preg Match All,我想使用preg_match_all()提取[[和]]之间的内容,但忽略[[和]]],因此,例如以下文本: $text = <<<TEXT Some text going here [[ 1. this is a text ]] another text but multiple lines [[ 2. this is a text ]] This should be ignored, haveing 3 on the left [[[ 3. this is a
$text = <<<TEXT
Some text going here
[[ 1. this is a text ]]
another text but multiple lines
[[ 2. this
is a
text ]]
This should be ignored, haveing 3 on the left
[[[ 3. this is a text ]]
This should be ignored, haveing 3 on the right
[[ 4. this is a text ]]]
This should be ignored, haveing 3 both on the left and right
[[[ 5. this is a text ]]]
This is the final sentence.
[[ 6. this is a text ]]
TEXT;
if (preg_match_all("(?!<\[)(\[\[.*?\]\])(?!\[)", $text, $tags, PREG_PATTERN_ORDER)) {
$tags = $tags[0];
}
echo '<pre>';
print_r(tags);
echo '</pre>';
$text=试试:
尝试:
您可以使用以下模式:
~(?<!\[)\[\[([^][]*)]](?!])~
preg\u match\u all('~(?
如果标记内不允许使用方括号,则图案可以缩短为:
((?<!\[)\[\[([^\[][^\]]*)\]\](?!\]))
~(?您可以使用此模式:
~(?<!\[)\[\[([^][]*)]](?!])~
preg\u match\u all('~(?
如果标记内不允许使用方括号,则图案可以缩短为:
((?<!\[)\[\[([^\[][^\]]*)\]\](?!\]))
~(?这里有一个正则表达式可以完成这项工作:
(?
分解这个
- 任何不是由一个[
- [[
- 任何字符,但[
- 任何字符,但]0次或更多次
- ]]
- 后面不跟a]
这应该是防弹的,但它需要至少1个介于[[和]]之间的字符。这里有一个正则表达式可以完成这项工作:
(?
分解这个
- 任何不是由一个[
- [[
- 任何字符,但[
- 任何字符,但]0次或更多次
- ]]
- 后面不跟a]
这应该是防弹的,但它需要至少1个介于[[和]]之间的字符。做得很好。必须用lookarounds完成。为您创建了一个工作示例:非常感谢!它工作得很好!Regex非常复杂,仍在学习:)@r3mus:谢谢你的例子。它是最优雅的,你没有为了吸引注意而建造一堵巨大的代码墙;@r3mus:但是如果你愿意,如果你使用详细模式(\x)、子模式定义(((DEFINE)(?…)(?…)(?)(?)
),你可以用一个模式建造一堵代码墙和注释。它不太简洁,但更具可读性(对长模式也很有用)。做得很好。必须用lookarounds完成。为您创建了一个工作示例:非常感谢!它工作得很好!正则表达式非常复杂,仍在学习:)@r3mus:谢谢你的例子。它是最优雅的,你没有为了吸引注意而建造一堵巨大的代码墙;@r3mus:但是如果你愿意,如果你使用详细模式(\x)、子模式定义(((DEFINE)(?…)(?…)(?)(?)
),你可以用一个模式建造一堵代码墙和注释。它不太简洁,但更具可读性(并且对长模式更有用)。3.不应该匹配,6.应该。这是一个错误的答案。抱歉,尝试了但选择了所有内容:(@user702300,即使在更新之后?更新之后,如果之前没有字符,它将不匹配[[@DanielGimenez updated.3.不应该匹配,6应该匹配。这是一个错误的答案。抱歉,已尝试但选择了所有内容:(@user702300,即使在更新之后?更新之后,如果之前没有字符,则将不匹配[[@DanielGimenez更新。谢谢,它运行得非常好!只需选择由@Casimir et Hippolythank首先给出的正确答案。谢谢,它运行得非常好!只需选择由@Casimir et Hippolyte首先给出的正确答案
((?<!\[)\[\[([^\[][^\]]*)\]\](?!\]))