http://php.net/manual/en/function.preg-quote.php:
特殊的正则表达式字符是:.\ +*?[^] $(){} =!<> | : -
但是这个页面说的是特殊字符[ \ ^ $ . | ? * + ( )
好的,我知道第一页是专门针对php正则表达式的.但是为什么我们需要逃避!,<,>,:,=,-?
我试图做一个preg_match不逃避<,>,-并且!和一切工作的完美.
这些字符是元字符,但它们不需要转义.他们的共同点是它们出现在特殊的分组结构中:
(?:...) # non-capturing group
(?=...) # positive lookahead
(?!...) # negative lookahead
(?<name>...) # named capturing groups
(?<=...) # positive lookbehind
(?<!...) # negative lookbehind
(?>...) # atomic group
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,它们只具有特殊含义.因此,如果您获取任何字符串并转义所有这些字符:[\^$.|?*+(){,那么您将获得一个正确匹配字符串字符的正则表达式,因为其他元字符永远不会位于元上下文中.
例如,]如果有一个先前未转义的人[打开了一个角色类,那么它只是一个元字符.
类似地,-它只是一个字符类中的元字符,意思是"范围",如[a-z] (在文字-中)[abc-].
所以要逃避字符串,[tag-soup]你只需要逃避[.在字符类之外的,]而-只是当作文字.
总之,如果你取一个字符串并转义所有"无条件"元字符([\^$.|?*+(){),那么你得到一个正则字符串字符串完全匹配的正则表达式.
| 归档时间: |
|
| 查看次数: |
1830 次 |
| 最近记录: |