Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.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 简单正则表达式帮助删除括号和括号之间的内容_Php_Regex - Fatal编程技术网

Php 简单正则表达式帮助删除括号和括号之间的内容

Php 简单正则表达式帮助删除括号和括号之间的内容,php,regex,Php,Regex,我需要移除支架和中间的所有东西: $url = 'abc[wenn]'; echo preg_replace('/\[(.)\]/i','',$url); 我的正则表达式有什么不正确的地方?您需要星号*或+量词才能工作: /\[.*?\]/i 没有它,()将只匹配一个字符 更好的是,如果[和]之间的值不能包含]本身,则可以使用更强大的表达式: /\[[^\]]+\] \[ '[' [^\]]* any character except: '\]' (

我需要移除支架和中间的所有东西:

$url = 'abc[wenn]';
echo preg_replace('/\[(.)\]/i','',$url);

我的正则表达式有什么不正确的地方?

您需要星号
*
+
量词才能工作:

/\[.*?\]/i
没有它,
()
将只匹配一个字符

更好的是,如果
[
]
之间的值不能包含
]
本身,则可以使用更强大的表达式:

/\[[^\]]+\]
\[             '['
 [^\]]*        any character except: '\]' (0 or more times)
\]             ']'

您需要星号
*
+
量词才能工作:

/\[.*?\]/i
没有它,
()
将只匹配一个字符

更好的是,如果
[
]
之间的值不能包含
]
本身,则可以使用更强大的表达式:

/\[[^\]]+\]
\[             '['
 [^\]]*        any character except: '\]' (0 or more times)
\]             ']'

没有设置量词,因此匹配失败,字符串重复。您还使用了
i
修饰符(不区分大小写),该修饰符在本例中无效,可以删除

可以识别以下量词

*      Match 0 or more times
+      Match 1 or more times
以下是您正在寻找的方法

preg_replace('/\[[^\]]*\]/', '', $url);
正则表达式:

/\[[^\]]+\]
\[             '['
 [^\]]*        any character except: '\]' (0 or more times)
\]             ']'
如果要删除嵌套括号,
abc[foo[bar[baz]]]
可以使用以下命令:

preg_replace('/\[(?:[^\[\]]|(?R))*\]/', '', $url);

没有设置量词,因此匹配失败,字符串重复。您还使用了
i
修饰符(不区分大小写),该修饰符在本例中无效,可以删除

可以识别以下量词

*      Match 0 or more times
+      Match 1 or more times
以下是您正在寻找的方法

preg_replace('/\[[^\]]*\]/', '', $url);
正则表达式:

/\[[^\]]+\]
\[             '['
 [^\]]*        any character except: '\]' (0 or more times)
\]             ']'
如果要删除嵌套括号,
abc[foo[bar[baz]]]
可以使用以下命令:

preg_replace('/\[(?:[^\[\]]|(?R))*\]/', '', $url);

@什么没用?对不起,我错了。没有仔细看。。这没关系,也是一种选择+1@hek2mgl好的,没问题,谢谢。+1可以写成
/\[^]*]/
(小心量词和OP请求)@CasimiretHippolyte谢谢,我知道,但我不想混淆正则表达式,因为它看起来已经混淆了,因为所有的
[
]
@hek2mgl什么没用?对不起,我错了。没有仔细看。。这没关系,也是一种选择+1@hek2mgl好的,没问题,谢谢。+1可以写成
/\[^]*]/
(小心量词和OP请求)@CasimiretHippolyte谢谢,我知道,但我不想混淆正则表达式,因为它看起来已经混淆了,因为所有的
[
]
。是否存在括号嵌套的可能性?此处可能有一个简单的字符串操作选项,该选项的性能可能优于正则表达式,具体取决于所计算字符串的预期值。是否总是只有一组括号?括号内的部分是否总是在字符串的末尾?括号是否嵌套?这里可能有一个简单的字符串操作选项,它的性能可能比正则表达式更好,具体取决于所计算字符串的预期值。是否总是只有一组括号?括号内的部分是否始终位于字符串的末尾?