【发布时间】:2014-06-06 01:21:36
【问题描述】:
我为逻辑表达式创建了一个简单的语法,使用布尔运算符和字符串作为它们的操作数,我计划将其作为 URL 查询字符串传递。我将根据$query 字符串中的操作数是否存在于另一个名为$text 的字符串中来使用它来匹配字符串。
考虑以下示例(在 PHP 中):
function search($text, $query) // $text, $query are strings
{
// returns true if logical expression built from $query is true for $test string
// otherwise returns false. $query explained:
// (1) variables in $query are strings between brackets and operators
// (2) operators are: &=and, |=or, !=not
// (3) priority of logical operations is defined by brackets: ()
// (4) variable = true if substring exists in $text, false if not
}
// examples:
$text1 = 'str4 str3 blalbablastr2';
$text2 = 'str4whateverhere str3str5';
// str5 is present or str1 is present
$simpleQuery = 'str5|str1';
// (str1 or str2 present), (str3 present), and (str4 present or str5 not present)
$complexQuery = '(str1|str2)&str3&(str4|!str5)';
search($text1, $simpleQuery); // returns false as 'str5' OR 'str1' = false
search($text2, $simpleQuery); // returns true as 'str5' = true
search($text1, $complexQuery); // returns true as 'str2' AND 'str3' AND ('str4' AND NOT 'str5') = true
search($text2, $complexQuery); // returns false as 'str1' OR 'str2' = false
我可以使用“传统”方法编写搜索功能:
- 提取子字符串并创建相关变量
- 初始化变量(根据它们在 $text 中的存在分配真/假)
- 构建操作树(优先级)
- 将运算符应用于变量
但是我相信使用正则表达式的方法更短、更快。如果您对正则表达式足够了解以提供实际帮助,请提供帮助。谢谢!
【问题讨论】:
-
您调用的
search()函数是什么?search不是内置的 PHP 函数。你的意思是preg_match? -
(str4|!str5)是指str4还是不是str5?所以有什么不是str5? -
@vvanasten OP 询问如何编写
search()函数 -
@AbraCadaver 我认为 OP 的意思是“字符串包含'str4'或不包含'str5'”
-
差不多就是正则表达式,为什么不用正则表达式呢?