PHP正则表达式 - 提取数据

时间:2014-11-29 22:00:36

标签: php regex

我有一个很长的字符串,我试图通过特定的单词提取在该字符串中消除的特定数据。

例如,这是字符串的子集:

Current   Owner  123 Capital    Calculated  

我希望提取

123 Capital

正如您所看到的,它被#34;当前所有者"所包围。 (左边有一堆任意空格)"计算" (再次使用任意空格)向右。

我试过这个,但我在RegEx有点新鲜。任何人都可以帮我创建一个更有效的RegEx吗?

preg_match("/Owner[.+]Calculated/",$inputString,$owner);

谢谢!

3 个答案:

答案 0 :(得分:2)

字符类定义一组字符。说,“匹配由类指定的一个字符”。将点.和量词放在capturing组内,并启用s修饰符,以强制点跨越换行符。

preg_match('/Owner(.+?)Calculated/s', $inputString, $owner);
echo trim($owner[1]);

注意: +greedy运算符,这意味着它将尽可能多地匹配,并且仍允许正则表达式的其余部分匹配。使用+?来防止贪婪意味着“一个或多个 - 最好尽可能少”。

答案 1 :(得分:0)

您可以使用外观作为

(?<=Owner)\s*.*?(?=\s+Calculated)

使用示例

$str = "Current Owner 123 Capital Calculated ";
preg_match("/(?<=Owner)\s*.*?(?=\s+Calculated)/", $str, $matches);
print_r($matches);

将提供输出

Array ( [0] => 123 Capital ) 

答案 2 :(得分:0)

希望这有帮助,组索引#1是你的目标:

Owner\s+(\d+\s+\w+)\s+Calculated

您可能还想尝试像RegExr这样的工具来帮助您学习/修补。