Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.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,我有一些文字,如: name: [my_name] email: [my_email] 我想用regex抓取方括号中的字段,我该怎么做? 我尝试过使用这种模式:[*。?] 不幸的是,它不起作用。PHP给出了以下错误: compilation failed: nothing to repeat at offset 0 怎么了?模式正确吗?您应该移动*并退出[和]。所以,就让它成为\[.\]因为。已匹配任何字符,并且*表示:该字符的0个或更多。所以。*是任何字符的0或更多您应该移动*并转义[a

我有一些文字,如:

name:  [my_name]
email: [my_email]
我想用regex抓取方括号中的字段,我该怎么做? 我尝试过使用这种模式:[*。?]

不幸的是,它不起作用。PHP给出了以下错误:

compilation failed: nothing to repeat at offset 0

怎么了?模式正确吗?

您应该移动*并退出[和]。所以,就让它成为\[.\]因为。已匹配任何字符,并且*表示:该字符的0个或更多。所以。*是任何字符的0或更多

您应该移动*并转义[and]。所以,就让它成为\[.\]因为。已匹配任何字符,并且*表示:该字符的0个或更多。So.*是任何字符的0或更多

括号是正则表达式中的特殊字符。为了匹配它们,你必须用反斜杠来避开它们。类似\[.*?\]的内容。添加parens将捕获其中匹配的内容,以便以后使用。否则,您只是在整个模式上进行匹配,您必须手动去除括号。

括号是正则表达式中的特殊字符。为了匹配它们,你必须用反斜杠来避开它们。类似\[.*?\]的内容。添加parens将捕获其中匹配的内容,以便以后使用。否则,您只需在整个图案上进行匹配,就必须手动去除括号。

不,您的顺序错了。应该是这样的

\[(.*)\]
.*=尽可能多次重复的内容


您得到的编译错误是因为编译器现在不知道要重复什么,如[是正则表达式中的一个特殊字符。您添加的?在括号内也不允许有任何内容,我想您不需要,所以我将其删除。问号使前面的语句成为可选语句。围绕*的括号用于捕获结果。如果您不添加这些内容,正则表达式将匹配,但您不会得到结果结果在括号内。

不,您的订单错了。应该是这样的

\[(.*)\]
<?php
$text =
"name:  [my_name]
email: [my_email]";

$pattern = '/\[(.*)\]/';
$matches = array();

preg_match_all($pattern, $text, $matches);

$name = $matches[1][0];
$email = $matches[1][1];

print "$name<br />";
print "$email";
?>
.*=尽可能多次重复的内容

您得到的编译错误是因为编译器现在不知道要重复什么,如[是正则表达式中的一个特殊字符。您添加的?在括号内也不允许有任何内容,我想您不需要,所以我将其删除。问号使前面的语句成为可选语句。围绕*的括号用于捕获结果。如果您不添加这些内容,正则表达式将匹配,但您不会得到结果因此,在括号内

<?php
$text =
"name:  [my_name]
email: [my_email]";

$pattern = '/\[(.*)\]/';
$matches = array();

preg_match_all($pattern, $text, $matches);

$name = $matches[1][0];
$email = $matches[1][1];

print "$name<br />";
print "$email";
?>
/分隔符本身不是实际模式的一部分。\用于转义[and]括号,因为它们在不转义时定义模式中的字符类定义。并定义子模式,这意味着子模式捕获的文本将放入preg_match_的第三个参数引用的数组中。在本例中,所有参数均为$matches

/分隔符本身不是实际模式的一部分。\用于转义[and]括号,因为它们在不转义时定义模式中的字符类定义。并定义子模式,这意味着子模式捕获的文本将被放入preg_match_的第三个参数引用的数组中。在本例中,所有参数都是$matches。

转义它! [和]特殊字符,因此需要对其进行转义:

\[*.?\]
逃开! [和]特殊字符,因此需要对其进行转义:

\[*.?\]

什么?那不是只匹配[a]和[]而不是[foo]?在你按下Add Comment之前,@x3ro已经编辑了它。我自己注意到了它;我想你的意思是说\[.*.\],否则,你只匹配了一个可选字符。为了得到0或更多的使用。*用于一个或更多的使用。+这会使模式\[.+.\]什么?这不就是匹配[a]吗和[]但不是[foo]?@x3ro在你按下Add Comment之前就已经编辑过了。我自己也注意到了;我想你的意思是说\[.*?\],否则,你只匹配了一个可选字符。为了得到0或更多的使用。*用于一个或更多的使用。+这将使模式\[.+?\]我使用的正是你告诉我的模式:$pattern='[.]“;但出现了错误:分隔符不能是反斜杠或字母数字….:在使用perl正则表达式preg_*函数时,需要用分隔符括住所有模式。通常使用/,例如preg_replace'/[.]/',…我使用的正是您告诉我的模式:$pattern='[.]“;但出现该错误:分隔符不能是反斜杠或字母数字。:使用perl正则表达式preg_*函数时,需要用分隔符括住所有模式。通常使用/,例如preg_replace'/[.]/',”。。。