另一个noob正则表达式问题/问题。我可能正在做些傻事,所以我想我会利用SO常客的一般聪明才智;)
尝试匹配换行符,但前提是它们出现在双引号或单引号内。我还想捕获引号之间但不包含换行符的字符串。
好的,这就是我得到的,输出。在那之下,将是我想得到的输出。任何帮助将不胜感激! :)
我使用Regex Coach来帮助我创建模式,成为新手和所有人。根据RC,我提供的模式确实匹配数据中的所有出现,但在我的PHP中,它跳过了多行部分。我已经尝试使用'm'模式修饰符,但无济于事。
$ CompressedData的内容:
<?php
$Var = "test";
$Var2 = "test2";
$Var3 = "blah blah
blah blah blah
blah blah blah blah";
$Var4 = "hello";
?>
模式/代码:
preg_match_all('!(\'|")(\b.*\b\n*)*(\'|")!', $CompressedData, $Matches);
$ Matches的当前print_r输出:
Array
(
[0] => Array
(
[0] => "test"
[1] => "test2"
[2] => "hello"
)
...
}
$ Matches的希望print_r输出:
Array
(
[0] => Array
(
[0] => "test"
[1] => "test2"
[2] => "blah blah
blah blah blah
blah blah blah blah"
[3] => "hello"
)
...
}
答案 0 :(得分:4)
m
修饰符不会使点匹配换行符。这就是s
修饰符的用途。除了字符串的开头/结尾外,m
使^
和$
匹配行的开头/结尾。
尝试/(\'|")((?:(?!\1).)*)\1/s
说明:
(\'|")
:匹配单引号或双引号。请记住它在反引用\1
中的哪一个。
(?:(?!\1).)
:匹配任何字符,只要它不是开头引号字符(在\1
中)。
(...*)
:尽可能多地重复并在反引用\2
中捕获匹配。
\1
:匹配开头的引号字符。
答案 1 :(得分:1)
$str=<<<'EOF'
<?php
$Var = "test";
$Var2 = "test2";
$Var3 = "blah blah
blah blah blah
blah blah blah blah";
$Var4 = "hello";
?>
EOF;
$s = preg_replace('/<\?php|\?>/sm',"",$str);
$s = preg_split("/.*=/",$s);
print_r($s);