找到[abc]但找不到[;;abc]的正则表达式



这么晚了,我不太明白。

我的文本是这样的:

This is a [;;Text] and I want to match [center]everything without ;;[/center]

我用它来转换成HTML:

return preg_replace('/[(.+)]/U', '<$1>', $text);

我认为模式/[[^;{2}](.+)]/U应该可以做到,但它不起作用。

例如,您可以匹配[和后跟单词字符的可选/,直到结束的]

请注意,在这种情况下,您不需要/U标志来使量词变为惰性。

[/?w+]
$text = ' This is a [;;Text] and I want to match [center]everything without ;;[/center]';
$result = preg_replace('/[(/?w+)]/', "<$1>", $text);
echo $result;

输出
This is a [;;Text] and I want to match <center>everything without ;;</center>

Regex演示


对于更具体的匹配,您可以在[之后排除;;匹配,并使用否定字符类匹配除[]之外的所有字符。

[(?!;;)([^][]*)]

Regex演示

我发现了以下模式:[(?<!;;)([w/]+?)]

指向演示的链接:https://regex101.com/r/Htd32j/1

请注意,它只在特定情况下匹配,如果你想要任何带有空格或其他特殊字符的标签,它将不起作用,可能需要一些修改。

如果您想通过跳过;的出现而仅提取[]中的文本,您可以尝试以下操作。我刚刚修改了@Mehdi regex。

(?<=[;;)?w+(?=])

检查https://regex101.com/中php的表达式

查看下面的链接

https://regex101.com/r/bFyW8S/1

我想出的匹配这个模式的正则表达式非常简单:

[[][A-Za-z0-9]*[]]

为了便于理解,将其分解成更小的部分:

[[] begins with "["
[A-Za-z0-9]* contains one or more alphabet or numeric character

[]] ends with "]"

这将匹配[center],但不匹配[/center]或[;;Text],因为它们有特殊字符,而正则表达式只查找字母和数字。


编辑:如果你想匹配除";"然后你可以这样写:

[[][^;]*[]]

遵循非常相似的逻辑:

[[] begins with "["
[^;]* one or more character that is not ";"
[]] ends with "]"

匹配[center][/center],但不匹配[;;Text]

相关内容

最新更新