1

我有一个大字符串

------%%CreationDate: 11/9/2006 1:01 PM %%BoundingBox: -1 747 53 842 %%HiResBoundingBox: -0.28---------

现在我想在这场比赛“%%BoundingBox:”之后得到值,我的意思是我需要得到“-1 747 53 842”,所以我可以拆分它并处理,请帮助如何使用 preg_match 或任何其他方法来做到这一点. 谢谢。

4

5 回答 5

2

尝试使用以下正则表达式:

/%%BoundingBox: ([^%]*)/

此正则表达式匹配第一个%字符之前的所有内容。

/%%BoundingBox: (.*?)%%/

此正则表达式匹配之前的所有内容%%- 如果%出现单个,它将被捕获。

PHP代码:

$input  = '------%%CreationDate: 11/9/2006 1:01 PM %%BoundingBox: -1 747 53 842 %%HiResBoundingBox: -0.28---------';
preg_match('/%%BoundingBox: ([^%]*)/', $input, $matches);
$output = $matches[1];
于 2013-09-03T05:41:03.170 回答
1

您可以使用strpos()找到 "%%BoundingBox:" 和 "%%HiResBoundingBox:" 的位置,然后使用substr()提取值。

于 2013-09-03T05:41:51.247 回答
0

似乎匹配集是数字和空格,所以:

/%%BoundingBox: ([\s\d-]+)/

这样做可以使它工作,即使它没有跟随%%; 这是一个示例实现:

preg_match_all('/%%BoundingBox: ([\s\d-]+)/', $string, $matches);
print_r($matches[1]);

输出:

Array
(
    [0] => -1 747 53 842
)

您可以通过强制执行 4 组数字来使其更加严格:

preg_match_all('/%%BoundingBox: ((?:\s*\-?\d+){4})/', $string, $matches);

更新

要将它们解析为键值对,您可以这样做:

preg_match_all('/%%([^:]++):([^%]*+)/', $string, $matches);
print_r(array_combine($matches[1], array_map('trim', $matches[2])));

输出:

Array
(
    [CreationDate] => 11/9/2006 1:01 PM
    [BoundingBox] => -1 747 53 842
    [HiResBoundingBox] => -0.28---------
)
于 2013-09-03T05:42:02.537 回答
0
$text = '------%%CreationDate: 11/9/2006 1:01 PM %%BoundingBox: -1 747 53 842 %%HiResBoundingBox: -0.28---------';
$pattern = "#(%%BoundingBox: )(.*?)( %%HiResBoundingBox)#i";
preg_match_all($pattern, $text, $matches);
print_r($matches[2]);

输出:

Array
(
    [0] => -1 747 53 842
)
于 2013-09-03T05:43:06.623 回答
0

尝试这个,

$str='------%%CreationDate: 11/9/2006 1:01 PM %%BoundingBox: -1 747 53 842 %%HiResBoundingBox: -0.28---------';;
preg_match("/\%\%BoundingBox:\s(.*)\s\%\%/",$str,$match);

会给

Array ( [0] => %%BoundingBox: -1 747 53 842 %% [1] => -1 747 53 842 )

然后你可以找到你的价值

echo $match[1];// -1 747 53 842
于 2013-09-03T05:44:27.557 回答