我有一个大字符串
------%%CreationDate: 11/9/2006 1:01 PM %%BoundingBox: -1 747 53 842 %%HiResBoundingBox: -0.28---------
现在我想在这场比赛“%%BoundingBox:”之后得到值,我的意思是我需要得到“-1 747 53 842”,所以我可以拆分它并处理,请帮助如何使用 preg_match 或任何其他方法来做到这一点. 谢谢。
我有一个大字符串
------%%CreationDate: 11/9/2006 1:01 PM %%BoundingBox: -1 747 53 842 %%HiResBoundingBox: -0.28---------
现在我想在这场比赛“%%BoundingBox:”之后得到值,我的意思是我需要得到“-1 747 53 842”,所以我可以拆分它并处理,请帮助如何使用 preg_match 或任何其他方法来做到这一点. 谢谢。
尝试使用以下正则表达式:
/%%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];
您可以使用strpos()找到 "%%BoundingBox:" 和 "%%HiResBoundingBox:" 的位置,然后使用substr()提取值。
似乎匹配集是数字和空格,所以:
/%%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---------
)
$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
)
尝试这个,
$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