我正在编写一个搜索词解析器,用于分类后续的后处理。目前我有这个模式:
/
以样本搜索字符串为例:
我得到的几乎与上面的匹配相同,但是术语
我知道部分
这是我的测试脚本:
非常感谢!
/
([+])?([\-])?(\"([^\"]+)?\"?|([^\\s]+)?|([^*]+)?)([\\s])?
/以样本搜索字符串为例:
c++ +this -only this* +"is a very" "complex example"
我希望得到以下结果:G1 G2 G3 G4 G5 G6 G7
c++ c++ [space]
+ +this this [space]
- -only only [space]
this* this * [space]
+ "is a very" is a very [space]
"complex example" complex example [space]
我得到的几乎与上面的匹配相同,但是术语
this*
出现在第5组中,作为this*
。我知道部分
...([^\\s]+)?|([^*]+)?)...
不正确,但我没有更好的想法来重新表述它。我尝试了几种方法,但貌似没有通过交换子模式等找到一个好的解决方案。
如果有人能给我一些提示如何解决这个问题,并可能使搜索项匹配部分更加有效,我会很高兴的。这是我的测试脚本:
<?php
$s = "c++ +this -only this* +\"is a very\" \"complex example\"";
$rc = preg_match_all(
"/([+])?([\-])?(\"([^\"]+)?\"?|([^\\s]+)?|([^*]+)?)([\\s])?/",
$s,
$m);
print_r($m);
?>
非常感谢!