php正则表达式中贪婪与非贪婪介绍

网络编程 2025-03-31 09:58www.168986.cn编程入门

一、贪婪与非贪婪

贪婪,这个词在日常生活里可能意味着对某物的过度追求,而在编程和正则表达的世界里,贪婪则指的是在处理字符串时尽可能多地匹配的模式。想象一下,你面对一个包含多个面包描述的字符串:面包一面包二,如果你贪婪地匹配,你会想把两个面包都取出来,因为你想要更多。相反,非贪婪就是只取所需,即只取第一个内的面包。

在PHP中,正则表达式的贪婪行为可以通过修饰符来改变。默认情况下,正则表达式是贪婪的,会尽可能多地匹配。例如,使用正则表达式`/<td>(.)<\/td>/`匹配字符串时,它会匹配整个字符串,因为默认是贪婪模式。但当我们添加修饰符使模式变为非贪婪时,如使用`/<td>(.?)<\/td>/`,它就会尽可能少地匹配,只获取第一个内的内容。

二、预搜索

预搜索是一种特殊的正则表达式技巧,它允许我们在匹配时查找某个模式是否存在于字符串中,但并不真正捕获该模式。这就像是在阅读一本书时,先预览一下接下来的内容,但不真正停下来仔细阅读。预搜索有两种主要形式:正向预搜索和负向预搜索。

正向预搜索“(?=x)”允许我们查找后面是否跟着某个特定的模式,但并不真正捕获该模式。例如,在字符串'windows NT windows 2003 windows xp'中,使用正则表达式`/windows (?=xp)/`只会匹配到xp前面的windows,而不会匹配到NT或2003前面的windows。这是因为使用了正向预搜索来检查后面是否跟着xp。

负向预搜索“(?!x)”则是检查后面是否没有某个特定的模式。在同样的字符串中,使用正则表达式`/windows (?!xp)/`会匹配到所有不是后面跟着xp的windows。这种预搜索形式有助于排除某些特定模式。值得注意的是,预搜索并不存储匹配结果供后续使用,它只是用来检查某个条件是否满足。这与常规的匹配存储形成鲜明对比。通过这两种预搜索方式,我们可以更灵活地处理字符串和提取所需的信息。PHP中的正则表达式:从匹配到反向预搜索

在PHP中,正则表达式是一种强大的工具,用于处理字符串和文本数据。让我们通过一些示例来其功能和优势。

让我们从一个简单的例子开始。假设我们有一个包含多个操作系统名称的字符串,如 "windows NT windows 2003 windows xp"。我们可以使用正则表达式来匹配这些名称并获取特定的部分。使用`preg_match_all`函数,我们可以匹配所有“windows”后面跟着任意字符但不是“xp”的部分。输出结果为:

```php

Array

(

[0] => Array (全部模式匹配的数组

[0] => windows N

[1] => windows 2

)

[1] => Array (子模式所匹配的字符串组成的数组,通过存储取得

[0] => N

[1] => 2

)

)

```

接下来,让我们反向预搜索的功能。反向预搜索允许我们匹配特定位置的字符串,而不管其前后内容如何。例如,我们可以匹配一个字符串中的特定数字序列,同时忽略前后的数字。使用`preg_match`函数和反向预搜索,我们可以匹配除前4个和后4个数字之外的中间8个数字。示例代码如下:

```php

$str = '1234567890123456';

preg_match('/(?<=\d{4})\d+(=\d{4})/',$str,$res);

print_r($res);

```

输出结果将是:

```php

Array

(

[0] => 56789012

)

```

我们还可以使用反向预搜索来排除某些字符或字符串。例如,我们可以匹配一个以非“我”字符开始的数字序列。示例代码如下:

```php

$str = '我1234567890123456';

preg_match('/(?

print_r($res);

```

输出结果将是:

```php

Array

(

[0] => 234567890123456

)

```

值得注意的是,PHP使用两种正则表达式规则:POSIX和PCRE。从PHP 5.3开始,POSIX被删除,因此建议使用PCRE(Perl Compatible Regular Expression)库提供的正则表达式。相较于ereg,preg_match效率更高。

正则表达式是处理字符串和文本数据的强大工具。通过学习和实践,您可以利用这些功能来构建高效、灵活的PHP应用程序。

上一篇:phpStorm+XDebug+chrome 配置详解 下一篇:没有了

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by