Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.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 preg_match_的正则表达式均不工作_Php_Regex_Preg Match All - Fatal编程技术网

Php preg_match_的正则表达式均不工作

Php preg_match_的正则表达式均不工作,php,regex,preg-match-all,Php,Regex,Preg Match All,这是我的字符串($string): 我在PHP文件中使用以下模式,并希望匹配http://abc.com/bb.jpg: preg_match_all('/(?<=zoom:\[\s{15}\').*(?=\')/', $string, $image); preg\u match\u all('/(?为了简化,我们不会使用look around,虽然我说我们需要s修饰符,但我错了,它只用于将新行与点匹配,我们在这里不使用,因此\s匹配新行: $string = <<<J

这是我的字符串(
$string
):

我在PHP文件中使用以下模式,并希望匹配
http://abc.com/bb.jpg

preg_match_all('/(?<=zoom:\[\s{15}\').*(?=\')/', $string, $image);

preg\u match\u all('/(?为了简化,我们不会使用look around,虽然我说我们需要
s
修饰符,但我错了,它只用于将新行与点匹配
,我们在这里不使用,因此
\s
匹配新行:

$string = <<<JSO
        swatch: 'http://abc.com/aa.jpg',
        zoom:[
          'http://abc.com/bb.jpg'
        ],
        large:[

          'http://abc.com/cc.jpg'
        ],
JSO;
preg_match_all('/zoom:\[\s*\'(?<img>[^\']*)\'\s*\]/', $string, $m);
print_r($m['img']);
说明:

Array
(
    [0] => http://abc.com/bb.jpg
)
/ # Starting delimiter
    zoom:\[ # Matches zoom:[
    \s* # Matches spaces, newlines, tabs 0 or more times
    \'  # Matches '
    (?<img>[^\']*) # named group, matches everything until ' found
    \'  # Matches '
    \s* # Matches spaces, newlines, tabs 0 or more times
    \]  # Matches ]
/ # Ending delimiter
/#起始分隔符
缩放:\[\匹配缩放:[
\s*#匹配空格、换行符、制表符0次或更多次
\"火柴"
(?[^\']*)#命名组,匹配所有内容,直到找到
\"火柴"
\s*#匹配空格、换行符、制表符0次或更多次
\]#匹配项]
/#结束分隔符

有趣的是,您实际计算了空格数?使用
\s*
并添加
s
修饰符以匹配新行:)如果这是JSON,也可以使用
JSON\u decode()
取而代之。啊,我的错,你不能在PHP中的lookaround中使用量词……据我所知,你不能在任何lookaround引擎中使用量词。我同意使用
json\u decode()
而不是regex。谢谢。结尾的“s”是什么意思?@user1610115你的意思是
\s*
?这将匹配空格、换行符、制表符0次或更多次。否则有
s
修饰符,用于匹配带点的换行符
/ # Starting delimiter
    zoom:\[ # Matches zoom:[
    \s* # Matches spaces, newlines, tabs 0 or more times
    \'  # Matches '
    (?<img>[^\']*) # named group, matches everything until ' found
    \'  # Matches '
    \s* # Matches spaces, newlines, tabs 0 or more times
    \]  # Matches ]
/ # Ending delimiter