PHP preg_match介于字符串之间

时间:2012-11-26 02:31:11

标签: php regex preg-match

我正在尝试获取字符串hello world

这是我到目前为止所得到的:

$file = "1232#hello world#";

preg_match("#1232\#(.*)\##", $file, $match)

5 个答案:

答案 0 :(得分:20)

建议使用#以外的分隔符,因为您的字符串包含#,而非贪婪的(.*?)则用于捕获#之前的字符。顺便说一句,如果#不是分隔符,则$file = "1232#hello world#"; preg_match('/1232#(.*?)#/', $file, $match); var_dump($match); // Prints: array(2) { [0]=> string(17) "1232#hello world#" [1]=> string(11) "hello world" } 不需要在表达式中进行转义。

[^#]+

更好的方法是使用*(或+代替#(如果字符可能不存在)来匹配所有字符,直到下一个preg_match('/1232#([^#]+)#/', $file, $match);

{{1}}

答案 1 :(得分:11)

使用lookarounds:

preg_match("/(?<=#).*?(?=#)/", $file, $match)

演示:

preg_match("/(?<=#).*?(?=#)/", "1232#hello world#", $match);
print_r($match)

输出:

Array
(
    [0] => hello world
)

测试 here

答案 2 :(得分:0)

在我看来,你必须得到$match[1]

php > $file = "1232#hello world#";
php > preg_match("/1232\\#(.*)\\#/", $file, $match);
php > print_r($match);
Array
(
    [0] => 1232#hello world#
    [1] => hello world
)
php > print_r($match[1]);
hello world

你得到不同的结果吗?

答案 3 :(得分:0)

preg_match('/1232#(.*)#$/', $file, $match);

答案 4 :(得分:0)

如果您希望分隔符也包含在数组中,这对于preg_split更有用,您可能不希望每个数组元素以分隔符开始和结束,示例即将展示将包括数组值内的分隔符。这将是您需要preg_match('/\#(.*?)#/', $file, $match); print_r($match);输出array( [0]=> #hello world# )

的内容