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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (104)

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

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

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

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

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

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

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

提问于
用户回答回答于

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

用户回答回答于

回答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

扫码关注云+社区

领取腾讯云代金券