在第一次匹配后查找字符串发生在PHP中

时间:2013-09-03 05:36:58

标签: php regex preg-match

我有一个大字符串

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

现在我想获得此匹配后的值“%% BoundingBox:” 我的意思是我需要得到“-1 747 53 842”,所以我可以将它拆分并处理,请帮助如何使用preg_match或其他任何方法执行此操作。 感谢。

5 个答案:

答案 0 :(得分: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];

答案 1 :(得分:1)

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

答案 2 :(得分: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---------
)

答案 3 :(得分: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
)

答案 4 :(得分: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