gpt4 book ai didi

php - 像 Google 一样使用 bool 运算符(AND、OR、NOT)搜索字符串中的单词

转载 作者:行者123 更新时间:2023-12-02 18:58:39 24 4
gpt4 key购买 nike

我想使用“Google”风格的字符串进行搜索,使用“or”、“and”和“not”等运算符。可以在正则表达式中模拟这个运算符吗?

例如,我想使用单词“Javascript”、“PHP”和“Perl”在给定字符串中执行以下搜索。

  1. Javascript 和 PHP
  2. Javascript 而不是 PHP
  3. Javascript、PHP 和 Perl
  4. Javascript 和(PHP 或 Perl)

PS:我不介意区分大小写的问题,因为所有重要语言都有一个选项。

评论后编辑:很明显,可以使用多个模式匹配扫描来运行任何 bool 表达式,但是,在单个正则表达式中思考解决方案是很有趣的。此外,“向前看”功能允许解决非常复杂的模式匹配问题。

最佳答案

是的!

感谢“向前看”运算符,它是在Perl语言的正则表达式语法中引入的。 Perl RegEx 框架被许多语言使用,包括 PHPJavascript

Perl 中也存在“look Behind”运算符,但 Javascript 不支持它。

下面,我展示了使用 JavaScript 语法进行搜索的正则表达式:

1- 搜索(“Javascript”和“PHP”)

       S = "Javascript is a client language and PHP is a server language";
patt = /^(?=.*Javascript).*PHP/;
if ( S.match(patt) )
document.write("Found it!");
else
document.write("Not Found");

它打印“找到它”

2- 现在搜索(“Javascript”而不是“PHP”)

     S = "Javascript is a client language and PHP is a server language"; 
patt = patt = /^(?!.*PHP).*Javascript/;
if ( S.match(patt) )
document.write("Found it!");
else
document.write("Not Found");

它会打印“Not Found”,因为 PHP 包含在字符串中。

3- 第三个搜索是(“Javascript”和“PHP”和“Perl”)

    S = "Javascript rules, PHP are in most server, however Perl is inspiring";
patt = /^(?=.*Javascript)^(?=.*PHP).*Perl/;
if ( S.match(patt) )
document.write("Found it!");
else
document.write("Not Found");

它打印“找到它!”

4- 最后,最后一种情况是 ("Javascript" 和 ("PHP""Perl"))。没有什么不同,我只是使用带括号(圆括号)的传统分组:

    S = "Javascript rules, however Perl is inspiring"; 
patt = /^(?=.*Javascript)(.*PHP|.*Perl)/;
if ( S.match(patt) )
document.write("Found it!");
else
document.write("Not Found");

它打印“Found it!”,因为 PHP 丢失,但 Perl 在字符串中。

评论后编辑:

我承认了。 “Look Forward”的语法很糟糕。不过,这很容易理解。扫描仪只看但不走!

        patt = /Bee (?=Gees)/;     // patt = patt1(?=patt2) => patt1 + patt2 
S = "Bee Gees";
if (S.match(patt))
document.write('ok'); // print OK and cursor stops at "G"

这是积极的展望

       patt = /Bee (?!Gees)/;   // patt = patt1(?!patt2) => patt1 + Not (patt2) 
S = "Bee Gees";
if (S.match(patt))
document.write('ok'); // it does not match
S = "Bee Goes";
if (S.match(patt))
document.write('ok'); // print OK and cursor stops at "G"

这是消极的展望

好消息是 Patt2 可以是一个复杂的模式,具有分组、子分组等。

最终解释:

  • .* : 0 个或多个字符
  • ^ :如果是字符串的开头则匹配。它不会移动光标。
  • $ :如果是字符串末尾则匹配。它不会移动光标。
  • (p1|p2|...) :如果 p1p2 或 ... 匹配则匹配。

所以

         patt = /^(?=.*Javascript).*PHP/; 

是一个正则表达式(/ 是一个正则表达式分隔符,作为字符串的引号),表示向前查找(跳转字符直到找到“Javascript”),并且,如果将会成功, 跳转字符直到找到“PHP” (请记住,向前看不会移动光标!) 即,如果扫描仪找到“Javascript”,“PHP”就会匹配。

关于php - 像 Google 一样使用 bool 运算符(AND、OR、NOT)搜索字符串中的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15041957/

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