Php regex在第一次出现的标记中查找文本;[……”是;

Php regex在第一次出现的标记中查找文本;[……”是;,php,regex,Php,Regex,我通过file\u get\u contents($text\u file)抓取一个文件,该文件在表单中的内容开头有一个标记 [widget_my_widget] 文件的完整内容可能是 [widget\u my\u widget] 这是文本文件的开头。它里面可能有[]个括号, 但只有第一次出现表示标记。 我正在寻找正则表达式来获取第一个括号[]中的文本字符串。在本例中,我希望返回widget\u my\u widget并将其加载到我的变量中 提前感谢您的帮助。在\[(.+?)\]中捕获的第一

我通过
file\u get\u contents($text\u file)
抓取一个文件,该文件在表单中的内容开头有一个标记

[widget_my_widget]
文件的完整内容可能是

[widget\u my\u widget]
这是文本文件的开头。它里面可能有[]个括号,
但只有第一次出现表示标记。
我正在寻找正则表达式来获取第一个括号[]中的文本字符串。在本例中,我希望返回widget\u my\u widget并将其加载到我的变量中


提前感谢您的帮助。

\[(.+?)\]
中捕获的第一个组将匹配方括号内的字符串

在PHP中,您可以这样使用它:

if (preg_match('/\[(.+?)\]/', file_get_contents($text_file), $group)) {
    print $group[1];
}

在这个字符串(文件内容)中首次出现时,忽略左方括号,然后尽可能少地匹配,但最多匹配(不包括)右方括号。

\[(.+?)\]
中捕获的第一个组将匹配方括号内的字符串

在PHP中,您可以这样使用它:

if (preg_match('/\[(.+?)\]/', file_get_contents($text_file), $group)) {
    print $group[1];
}

第一次出现在这个字符串(文件内容)中时,忽略左方括号,然后尽可能少地匹配,但最多匹配(不包括)右方括号。

我认为斯塔凡的答案基本上是正确的,但我有一个小的更正,我想您可能希望避免^,或者字符串必须以括号开头,您说过只需要第一个实例。关于代码

$str = ...

$pattern = '/\[([^\]+])\]/';
$n = preg_match($pattern, $str, $matches);
if ($n > 0) {
    $first_match = $matches[1];
    /// do stuff
}

我的模式看起来有点混乱,因为括号有特殊的含义,所以我将尝试解释它。。。我们在寻找一个开括号,然后是一个或多个不是右括号的字符(在本文中,插入符号的意思是“not”),然后是右括号。括号围绕着我们想要捕获的内容,内括号是字符类。如果这没有意义,就忽略我刚才说的所有内容。

我认为斯塔凡的回答基本上是正确的,但我有一个小的更正,我想你可能希望避免使用^,否则字符串必须以括号开始,你说你只需要第一个实例。关于代码

$str = ...

$pattern = '/\[([^\]+])\]/';
$n = preg_match($pattern, $str, $matches);
if ($n > 0) {
    $first_match = $matches[1];
    /// do stuff
}

我的模式看起来有点混乱,因为括号有特殊的含义,所以我将尝试解释它。。。我们在寻找一个开括号,然后是一个或多个不是右括号的字符(在本文中,插入符号的意思是“not”),然后是右括号。括号围绕着我们想要捕获的内容,内括号是字符类。如果这没有意义,就忽略我刚才说的一切。

也需要避开第二个括号。@jb,不确定第二个括号是什么意思,但在大多数正则表达式实现中,
]
不需要避开(不过避开它并没有坏处)。@jb,@Bart Kiers谢谢。为了避免计算机或人类的误解,我将避开它:-)@Bart,在这里我想我对Regex了解很多。我指的是
]
,但你是对的,它不必转义。今天学到了一些新东西。@Staffan,@jb,是的,我也经常逃避它,以免混淆人们@jb,你可能知道很多正则表达式,但总有人知道的更多!(我也是这样!):)也需要转义第二个括号。@jb,不确定第二个括号是什么意思,但在大多数正则表达式实现中,
]
不需要转义(不过转义也没什么坏处)。@jb,@Bart Kiers谢谢。为了避免计算机或人类的误解,我将避开它:-)@Bart,在这里我想我对Regex了解很多。我指的是
]
,但你是对的,它不必转义。今天学到了一些新东西。@Staffan,@jb,是的,我也经常逃避它,以免混淆人们@jb,你可能知道很多正则表达式,但总有人知道的更多!(我也是如此!):)