【问题标题】:Regex Convert string formula into mysql like query in php正则表达式将字符串公式转换为mysql,如php中的查询
【发布时间】:2020-09-23 08:47:25
【问题描述】:

将这个字符串公式转换为 MySQL 的最佳方法是什么,例如 PHP 中的搜索查询。

示例输入

(Business Intelligence) AND ((Business Objects Specialist) OR Cognos Impromptu OR (Crystal Reports) OR (Datawarehousing) OR (PowerBI) OR (SSAS) OR (SSIS) OR (SSRS))

预期输出:

(column LIKE '%Business Intelligence%') AND ((column LIKE '%Business Objects Specialist%') OR (column LIKE '%Crystal Reports%') OR (column LIKE '%Datawarehousing%'))

其他可能的输入:

  • dotNET 和 PHP
  • (Functioneel-Applicatie-Beheer)或(Technisch-Applicatiebeheer)
  • (msSQL-dba) 或 (Oracle)
  • (德尔福)
  • dotNET AND(episerver 或 sitecore 或 sitefinity 或 umbraco)
  • (dotNET AND (dotNET OR .Net core OR ASP.Net OR Azure OR C# OR Entity Framework OR episerver OR sitecore OR sitefinity OR umbraco OR vb.net OR Xamarin))
  • dotNET AND (HTML5 OR Javascript)

【问题讨论】:

  • “Cognos Impromptu”发生了什么?

标签: php mysql regex


【解决方案1】:

相反,我建议你瞄准 REGEXP(而不是 LIKE):

(Business Intelligence) AND
 ((Business Objects Specialist) OR Cognos Impromptu OR (Crystal Reports)
  OR (Datawarehousing) OR (PowerBI) OR (SSAS) OR (SSIS) OR (SSRS))

-->

    col REGEXP "(Business Intelligence)"
AND col REGEXP "(Business Objects Specialist)|Cognos Impromptu|(Crystal Reports)|(Datawarehousing)|(PowerBI)|(SSAS)|(SSIS)|(SSRS)"

其中一部分是微不足道的——“\s+OR\s+”——>“|”。不,即使这也不是微不足道的,因为你可以有一个包含“OR”的短语。

让我们稍微备份一下...如果您要强制用户输入原始字符串(使用 AND、OR 和括号),那么为什么不强制他们学习 REGEXP 语法呢?差别不大?

如果你真的想做解析,我建议你参加一个关于词法扫描和解析的计算机科学初级课程。您需要处理的一些问题:

  • 多个空格而不是一个。
  • Parens 是可选的。
  • 大写——可能由COLLATION处理。
  • 了解何时在代码中而不是在正则表达式中进行 AND/OR。
  • 字符串周围的括号并不重要,但其他括号提供优先级信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-13
    • 2020-07-17
    • 2012-01-28
    • 2022-11-18
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多