这么晚了,我不太明白。
我的文本是这样的:
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]