Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.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查找2个字符串(包括通配符)之间的匹配_Php_Regex - Fatal编程技术网

正则表达式php查找2个字符串(包括通配符)之间的匹配

正则表达式php查找2个字符串(包括通配符)之间的匹配,php,regex,Php,Regex,我想找到所有在[MATCH]anytext$string\u之后有$string\u的结果 PHP代码: $page = "anything/pages/Reading/120002/anything><div class='test'>"; $string_before = '/pages/Reading/'; $string_after = '/(.*?)><div class'; $regex= "'/".$string_before."([^#]+)".$

我想找到所有在[MATCH]anytext$string\u之后有$string\u的结果

PHP代码:

$page = "anything/pages/Reading/120002/anything><div class='test'>";

$string_before = '/pages/Reading/';
$string_after = '/(.*?)><div class';
$regex= "'/".$string_before."([^#]+)".$string_after."'/";

preg_match_all($regex, $page, $matches); 
var_dump($matches);

// I should be getting "120002"  in the example above
所以$string_在未正确输出后出现问题

我得到以下两个错误:

Notice: Undefined variable: pattern on line 66 (that's the preg_match_all)

Warning: preg_match_all(): Empty regular expression  on line 66
NULL

PHP正则表达式在前后使用分隔符。您已将分隔符设置为
'/
,这将不起作用,因为1)它是两个字符,2)在
$string\u中的
变量之前和
$string\u之后使用了多个斜杠

如果您将其更改为其他内容,例如这样,它将起作用,您将在
$matches[1]
中获得结果:

$regex= "@".$string_before."([^#]+)".$string_after."@";

您只需要摆脱您的模式(即用\/替换所有/即可)

$page=“任何东西/页面/阅读/120002/任何东西>”;
$string\u before='\/pages\/Reading\/';

$string\u after='\/(.*)>你的问题是什么?它不起作用。。。“不起作用”是什么意思?它是否准确地将“我不工作”结果输出到屏幕上?实际上不仅是
NULL
,而且还有一个警告。我没有任何警告。。该页面只显示它不工作。。我的$regex='/\/pages\/Reading\/([^#]+)\/(.*)>注意:未定义变量:第65行的模式警告:preg\u match\u all():第65行的空正则表达式null您的regex应该是:/\/pages\/Reading\/([^#]+)\/(.*)>我知道问题出在哪里了。修正了我的答案。在向模式添加分隔符时不需要额外的单引号。它不起作用。。my$regex=@\/pages\/Reading\/([^#]+)\/(.*)>注意:未定义变量:第65行的模式警告:preg#u match_all():第65行的空正则表达式null 1)您正在逃避斜杠,即使您不必这样做,因为我们更改了分隔符。2) 您的表达式称为$regex,而不是$pattern。相应地更改preg\u match\u all()调用。
Notice: Undefined variable: pattern on line 66 (that's the preg_match_all)

Warning: preg_match_all(): Empty regular expression  on line 66
NULL
$regex= "@".$string_before."([^#]+)".$string_after."@";
$page = "anything/pages/Reading/120002/anything><div class='test'>";

$string_before = '\/pages\/Reading\/';
$string_after = '\/(.*?)><div class';
$regex= "/".$string_before."([^#]+)".$string_after."/";

preg_match_all($regex, $page, $matches); 
var_dump($matches);