This article mainly introduces the relevant information of capturing groups and non-capturing groups in PHP regular expressions. Friends who need it can refer to it
I encountered a regular matching problem today, and suddenly I found that there is capture. The concept of groups is also ignored in the manual. When I turned to Baidu, I accidentally found that there are special uses of regular capture groups in C# and Java. When I searched for the keyword PHP, there was no relevant content. I tried it myself and found that in PHP It is also feasible, so I will summarize it. While sharing, I also hope that some experts and careful learners can find the problems in my understanding.
What is a capturing group
Capturing group syntax:
Characters |
Description |
Example |
##( pattern) |
Match pattern and capture As a result, the group number is automatically set. | (abc) dmatches abcd or abcabcd |
##(?< name>pattern) or ( ?' name'pattern) |
Match pattern and capture the result, set name to the group name. | |
num
| Reverse of capturing group Quote. where num is a positive integer. (\w)(\w)\2\1 |
matches abba |
name > or \k'name' | Backreference to the named capture group. where name is the capture group name. |
(? Match xabcx |
字符 | 描述 | Example |
##(?: pattern) | Match pattern, but do not capture the matching result. | 'industr(?:y|ies) Matches 'industry' or 'industries'. |
(?= pattern) | Zero-width forward lookup, no capture Matching results. | 'Windows (?=95|98|NT|2000)'Matches "Windows" in "Windows2000"Does not match" "Windows" in Windows3.1". |
(?!pattern) | Zero-width negative lookup, does not capture matching results. | 'Windows (?!95|98|NT|2000)' Matches "Windows" in "Windows3.1" No Matches "Windows" in "Windows2000". |
(?<=pattern) | Zero width forward lookback, Matches are not captured. | '2000 (?<=Office|Word|Excel)' matches "2000" in "Office2000" does not match" "2000" in Windows2000". |
(?pattern) | 零宽度负向回查,不捕获匹配结果。 | '2000 (? 匹配 " Windows2000" 中的 "2000" 不匹配 " Office2000" 中的 "2000"。 |
为什么称为非捕获组呢?那是因为它们有捕获组的特性,在匹配模式的()中,但是匹配时,PHP不会为它们编组,它们只会影响匹配结果,并不作为结果输出。
/d(?=xxx) 匹配"后面是xxx的一个数字"。
注意格式:只能放在匹配模式字符串之后!
例如:
$pattern='/\d(?=abc)/'; $str="ab36abc8eg"; $res=preg_match($pattern,$str,$match); var_dump($match);//6
匹配的6,因为只有它作为一个数字,后面还有abc。
(?<=xxx) /d 匹配"前面是xxx的一个数字"
注意格式:只能放在匹配模式字符串之前!
例如:
$pattern='/(?<=abc)\d/'; $str="ab36abc8eg"; $res=preg_match($pattern,$str,$match); var_dump($match);//8
匹配的8,因为只有它作为一个数字,后面还有abc。
与(?=xxx) (?<=xxx)相对的是(?!=xxx) (?
它表示前面/后面不是xxx的字符串,这里就不再举例了。
如果您觉得本博文对您有帮助,您可以推荐或关注我,如果您有什么问题,可以在下方留言讨论,谢谢。
总结:以上就是本篇文的全部内容,希望能对大家的学习有所帮助。
相关推荐:
The above is the detailed content of PHP capturing groups and non-capturing groups. For more information, please follow other related articles on the PHP Chinese website!