说我有这个字符串:fg_^"-kv:("value_i_want")frt
。该字符串将保持不变,除了value_i_want
- 可能会一直改变。这个小字符串隐藏在一个巨大的数据串中(不断变化),我已经保存在一个PHP变量中使用正则表达式提取值
有没有我可以做一个正则表达式的字符串,让我们说50000个字符来找到该字符串以上)不知道value_i_want是什么,然后在一个变量保存值 - 使用PHP
说我有这个字符串:fg_^"-kv:("value_i_want")frt
。该字符串将保持不变,除了value_i_want
- 可能会一直改变。这个小字符串隐藏在一个巨大的数据串中(不断变化),我已经保存在一个PHP变量中使用正则表达式提取值
有没有我可以做一个正则表达式的字符串,让我们说50000个字符来找到该字符串以上)不知道value_i_want是什么,然后在一个变量保存值 - 使用PHP
试试这个:
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:\(\")
- 正回顾后一ssertion,意味着搜索的字符串应该是完全此字符串后:fg_^"-kv:("
(?=\"\)frt)
- 正预测先行断言,意味着同样的,但在此之前: ")frt
[a-z_]+
- 你正在寻找的字符串,可以由一个或更多的字母和下划线。根据需要更改它。
g修饰符在PHP中不存在(当你想找到几个出现的时候,你需要使用'preg_match_all')。因为您不使用锚点,所以不需要m修饰符。您应该为正则表达式字符串使用单引号,而不是转义所有双引号。无需在字符类外面跳出连字符。你写“为了你的需要而改变它”,但是如果对角色没有特别的限制会发生什么? – 2015-02-09 19:02:16
感谢您的评论。 – streetturtle 2015-02-10 08:14:39
你可以使用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);
通过字符串搜索的大小限制仅受您的php安装访问的内存量的限制。你可以用'/ fg _ \ ^“\ - kv:\(”(。*?)“\)frt/s'这样的方法来做到这一点。 – 2015-02-09 18:40:33
你想说什么?这个'fg _ ^” - kv: (“......”)frt'是一个5000字的段落的子字符串? – diEcho 2015-02-09 18:41:34
如果外面的东西总是不变的,你可以使用substr。 – Kevin 2015-02-09 18:42:47