有人知道一个快速简单的explode()函数,可以忽略包含在一对任意字符(例如引号)中的拆分器字符吗?
例:
my_explode(
"/",
"This is/a string/that should be/exploded.//But 'not/here',/and 'not/here'"
);
Run Code Online (Sandbox Code Playgroud)
应该导致具有以下成员的数组:
This is
a string
that should be
exploded.
But 'not/here',
and 'not/here'
Run Code Online (Sandbox Code Playgroud)
字符用单引号括起来的事实将使它们不被分割.
可以处理两个包装器字符的解决方案的奖励积分
(not/here)
Run Code Online (Sandbox Code Playgroud)
原生PHP解决方案将是首选,但我不认为这样的事情存在!
我想创建一个PHP搜索功能,但使用类似Google的运算符.例如:
these words "this phrase" location:"Los Angeles" operator:something
Run Code Online (Sandbox Code Playgroud)
像location这样的运算符很重要:支持带有空格的值(因此这个例子中的引号),所以我不能只是拆分或使用标准令牌.我想有人在某个时候创建了一个用于执行此操作的库,但我找不到任何库.
或者如果它不需要库,那么这样做的好方法就是好的.
它只是解析我需要的搜索查询; 即从上面的查询中可以得到一个由以下组成的数组:
[0] => these
[1] => words
[2] => "this phrase"
[3] => location:"Los Angeles"
[4] => operator:something
Run Code Online (Sandbox Code Playgroud)
从那以后我可以为数据库构建搜索功能.
我有一个字符串
$string = 'Some of "this string is" in quotes';
Run Code Online (Sandbox Code Playgroud)
我想得到一个字符串中所有单词的数组,我可以通过这样做
$words = explode(' ', $string);
Run Code Online (Sandbox Code Playgroud)
但是我不想将引号中的单词拆分,所以理想情况下是结束数组
array ('Some', 'of', '"this string is"', 'in', 'quotes');
Run Code Online (Sandbox Code Playgroud)
有谁知道我怎么做到这一点?
我知道/[\s]+/'用空格分割字符串。我试图扩展它以忽略双引号内的任何空格。所以我想Hello World分开,但又不"Hello World"
preg_split('/[\s]+/', $string)是我在 PHP 中使用的表达式。
我正在用PHP构建一个过滤系统.我需要优先考虑基于关键字匹配的文本.过滤器必须识别不同类型的关键字.
其中一种类型是普通词keyword1 keyword2.这将过滤带有'keyword1'和'keyword2'的文本,无论它们是否在文本中连续出现的顺序如何.
另一种类型是单词的精确组合"keyword1 keyword2".这将优先考虑具有确切组合"keyword1 keyword2"的文章.
还有其他类型,但它们在这里不相关.
关键字类型可以合并,因此keyword1 "keyword2 keyword3"有效并且会搜索包含"keyword1"和确切组合"keyword2 keyword3"的文章.
对于第一种类型,我可以使用an explode(' ', $keywords)来获取数组中的关键字.但是,这会搞砸keyword1 "keyword2 keyword3",因为引号中的文本也会分开.
所以我需要一个分隔关键字的函数,但不会用引号分隔文本.有功能可以做到吗?如果没有,是一个正则表达式的方式去?