繁体   English   中英

正则表达式捕获方括号之间的字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM