[英]Regular expression to match all between <> which falls between square brackets
[英]Regular expression to capture string between square brackets
我有一个数组,其第一个元素可能包含类似[some text, here. That's some text]
[some text, here. That's some text]
我正在尝试找出一种模式,以检查是否存在这样的字符串,如果不创建它,但在制作模式时遇到问题。 到目前为止,这是我所做的
$pattern = '/^\[*\]$/';
if(preg_match($pattern,$exploded[0])){
$name = array_shift($exploded);
}else{
$name = "[Unnamed import] - " .gmdate("His");
}
但是即使我确定模式匹配,我也总是得到[Unnamed import]-032758
正则表达式^\\[*\\]$
不正确。
^ - Start anchor
\[ - A literal [
* - Quantifier for zero or more
\] - A literal ]
$ - End anchor
量词*
适用于之前的部分,在这种情况下,它适用于[
。 我猜您已经将*
与它在shell中的用法混淆了,它在任何情况下都意味着任何字符。
因此,您的正则表达式会在字符串的开头匹配[
零个或多个,在字符串的末尾匹配一个]
。
在正则表达式中,shell的*
等效于.*
,它可以多次匹配任何字符(换行符除外)。 因此,您可以尝试使用正则表达式^\\[.*\\]$
另外,您可以尝试: ^\\[[^\\]]*\\]$
*
本身不代表多个字符。 您需要加点号(= any char),后接星号.*
,否则星号表示要匹配零个或多个[
chars-因为它总是量化前面的字符。
您正在检查字符串是否以[
开头和以]
结尾。 您也可以不用正则表达式轻松地做到这一点,因为:
if(strlen($str) && $str[0] == '[' && $str[strlen($str)-1] == ']') {
// pattern found.
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.