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


PHP Regular Expressions. Searching for double quotes?

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

在快速搜索后,我发现了这个页面(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与颜色和颜色都匹配