PHP正则表达式。正在搜索双引号?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP正则表达式。正在搜索双引号?相关的知识,希望对你有一定的参考价值。

我正在编写一个php网页,它从搜索框中获取数据并使用它来搜索mysql数据库并返回结果。目前它只使用mySQL LIKE查询提供的所有数据。这不是很灵活,因为它将数据视为匹配的单个精确表达式。

快速谷歌后,我发现这个页面(http://www.iamcal.com/publish/articles/php/search/)我打算用来扩展我的搜索网页的功能。

但是,我对该网页上的教程有两个疑问:

1)本教程的第一部分是这样的:

$terms = preg_replace("/"(.*?)"/e", "search_transform_term('$1')", $terms);

我不明白为什么*后跟一个?,正如我所理解的那样。*表示一个字符(可以是任何字符)零次或多次,表示任何字符串。的?意味着零次或一次。因此没有。*?也意味着任何字符串?

2)我的第二个问题是如何使表达式替换语音标记中包含的表达式而不是括号?

答案

回答1。

。*?意思是,那个算子。*是懒惰的。这是什么意思。

正则表达式中的每个运算符都是贪婪的,它试图找到最大值,添加?它变得懒惰,它试图找到最低限度。

我用的时候

preg_replace("/_(.*)_/","Hi,_first_ and _second_ element","!replaced!");

输出将是

Hi,!replaced! element 

因为它找到了最大的文本,但在这种情况下:

preg_replace("/_(.*?)_/","Hi,_first_ and _second_ element","!replaced!");

输出将是

Hi,!replaced! and !replaced! element 

因为它试图找到与正则表达式匹配的最小文本。

我希望这已经足够了,因为我不知道如何更好地解释它:D

另一答案

问号使得匹配非贪婪,以便php在遇到“char”之前尝试匹配尽可能少的字符。

另一答案
  • 星号(*)允许点重复任意次数,包括零。
  • 问号(?)使前面的标记成为常规标记 表达可选。例如:colou?r匹配颜色和颜色。

以上是关于PHP正则表达式。正在搜索双引号?的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式在单引号内转义双引号

需要正则表达式用单引号或双引号解析关键字='值'

PHP正则表达式函数总结

正则表达式删除由双引号划定的 CSV 字段中的双引号

正则表达式用于在不被单引号或双引号包围时使用空格分割字符串

无法使用正则表达式在双引号之间提取字符串