繁体   English   中英

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

[英]PHP Regular Expressions. Searching for double quotes?

我正在编写一个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匹配颜色和颜色。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM