gpt4 book ai didi

php - Google 运算符的正则表达式

转载 作者:可可西里 更新时间:2023-10-31 22:59:27 25 4
gpt4 key购买 nike

使用 PHP,我试图通过支持类似 Google 的运算符来改进我网站上的搜索,例如

  • 关键字=自然/默认
  • “关键字”或“搜索词组”= 完全匹配
  • 关键字* = 部分匹配

为此,我需要将字符串拆分为两个数组。一个用于将确切的单词(但没有双引号)放入 $Array1() 并将其他所有内容(自然和部分关键字)放入 Array2()。

对于以下字符串,哪些正则表达式可以实现这一点?


示例字符串($string)

today i'm "trying" out a* "google search" "test"

想要的结果

$Array1 = array(
[0]=>trying
[1]=>google search
[2]=>testing
);

$Array2 = array(
[0]=>today
[1]=>i'm
[2]=>out
[3]=>a*
);

1) Exact 我已针对精确的正则表达式尝试了以下方法,但它返回两个数组,一个带有双引号,一个不带双引号。我可以只使用 $result[1],但这里可能缺少一个技巧。

preg_match_all(
'/"([^"]+)"/iu',
'today i\'m "trying" \'out\' a* "google search" "test"',
$result
);

2) Natural/Partial 下面的规则返回正确的关键字,但带有几个空白值。这个正则表达式规则可能很草率,还是我应该通过 array_filter() 运行数组?

preg_split(
'/"([^"]+)"|(\s)/iu',
'today i\'m "trying" \'out\' a* "google search" "test"'
);

最佳答案

您可以使用 strtok标记字符串。

例如,参见派生自 tokenizedQuoted function in the comments on the strtok manual pagetokenizeQuoted 函数:

// split a string into an array of space-delimited tokens, taking double-quoted and single-quoted strings into account
function tokenizeQuoted($string, $quotationMarks='"\'') {
$tokens = array(array(),array());
for ($nextToken=strtok($string, ' '); $nextToken!==false; $nextToken=strtok(' ')) {
if (strpos($quotationMarks, $nextToken[0]) !== false) {
if (strpos($quotationMarks, $nextToken[strlen($nextToken)-1]) !== false) {
$tokens[0][] = substr($nextToken, 1, -1);
} else {
$tokens[0][] = substr($nextToken, 1) . ' ' . strtok($nextToken[0]);
}
} else {
$tokens[1][] = $nextToken;
}
}
return $tokens;
}

这是一个使用示例:

$string = 'today i\'m "trying" out a* "google search" "test"';
var_dump(tokenizeQuoted($string));

输出:

array(2) {
[0]=>
array(3) {
[0]=>
string(6) "trying"
[1]=>
string(13) "google search"
[2]=>
string(4) "test"
}
[1]=>
array(4) {
[0]=>
string(5) "today"
[1]=>
string(3) "i'm"
[2]=>
string(3) "out"
[3]=>
string(2) "a*"
}
}

关于php - Google 运算符的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3811519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com