使用正则表达式提取值

时间:2015-02-09 18:37:22

标签: php regex

说我有这个字符串:fg_^"-kv:("value_i_want")frt。除了value_i_want之外,该字符串将保持不变 - 这可能会一直在变化。这个小字符串隐藏在一个巨大的数据串中(不断变化),我保存在一个PHP变量

我是否可以对字符串执行正则表达式,让我们说50000个字符来查找该字符串(上面)而不知道value_i_want是什么,然后将值保存在变量中 - 使用PHP

2 个答案:

答案 0 :(得分:3)

您可以使用strpos查找所需值的位置。您可能需要稍微调整一下,我还没有测试过它。 $long_string是您要搜索匹配的字符串。

$start = strpos($long_string, 'fg_^"-kv:("', 0);
$end = strpos($long_string, '")frt', $start);
$value_i_want = substr($long_string, $start+11, $end-$start-11);

答案 1 :(得分:1)

试试这个:

if (preg_match_all('/(?<=fg_\^\"\-kv:\(\")[a-z_]+(?=\"\)frt)/', $yourstring, $matches)) {
  echo "Match was found <br />";
  echo $matches[0];
}

模式:(?<=fg_\^\"\-kv:\(\")[a-z_]+(?=\"\)frt)

(?<=fg_\^\"\-kv:\(\") - 正面的后瞻断言,意味着搜索的字符串应该在此字符串之后:fg_^"-kv:("

(?=\"\)frt) - 积极的先行断言,意思相同,但在此之前: ")frt

[a-z_]+ - 您要查找的字符串,可能包含一个或多个字母和下划线。根据您的需要进行更改。

演示:https://regex101.com/r/vS7dI0/1