18

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

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

$file = "1232#hello world#";

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

5 回答 5

29

建议使用分隔符,而不是#因为您的字符串包含#,并且使用非贪婪(.*?)来捕获之前的字符#。顺便说一句,#如果它不是分隔符,则不需要在表达式中进行转义。

$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"
}

更好的是使用[^#]+(或*代替+if 字符可能不存在)将所有字符匹配到下一个#.

preg_match('/1232#([^#]+)#/', $file, $match);
于 2012-11-26T02:34:23.093 回答
14

使用环视:

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

演示:

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

输出:

Array
(
    [0] => hello world
)

在这里测试一下。

于 2012-11-26T02:49:17.197 回答
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

你得到不同的结果吗?

于 2012-11-26T02:38:20.367 回答
0
preg_match('/1232#(.*)#$/', $file, $match);
于 2012-11-26T02:39:55.590 回答
0

What if you want the delimiter to also be included in the array, this would be more usefull for preg_split where you might not want each array element to begin and end with the delimiters, the example im about to show would would include the delimeters inside the array values. this would be what you would need preg_match('/\#(.*?)#/', $file, $match); print_r($match); this would output array( [0]=> #hello world# )

于 2018-01-28T18:12:57.587 回答