Php 添加特殊字符时正则表达式匹配失败
想想这个,Php 添加特殊字符时正则表达式匹配失败,php,regex,Php,Regex,想想这个, $uri = '/post/search/foo'; $pattern = '~/post/search/[A-Za-z0-9_-]+(?=/|$)~i'; $matches = array(); preg_match($pattern, $uri, $matches); print_r($matches); // Success 它工作正常,因为[A-Za-z0-9_-]属于foo。因为我在写一个路由插件, 我希望这是缩写,以配合特殊字符以及 我想象一个正则表达式模式是这
$uri = '/post/search/foo';
$pattern = '~/post/search/[A-Za-z0-9_-]+(?=/|$)~i';
$matches = array();
preg_match($pattern, $uri, $matches);
print_r($matches); // Success
它工作正常,因为[A-Za-z0-9_-]
属于foo
。因为我在写一个路由插件,
我希望这是缩写,以配合特殊字符以及
我想象一个正则表达式模式是这样的:
[A-Z0-9!@$%^&*()有什么原因你不想只使用ungreedy
例如:
'~/post/search/.+(?=/|$)~iU'
您不想只使用ungreedy
,有什么原因吗
例如:
'~/post/search/.+(?=/|$)~iU'
在字符类内部转义并不困难,只有^
(仅在第一个位置),-
(不在第一个或最后一个位置),\
和[]
是特殊字符,而'
是字符串分隔符。另外还有regex分隔符
您使用~
作为正则表达式分隔符,我认为这是字符类中的关键点,因为在使用preg_quote()
时,默认情况下不会转义分隔符
所以这应该是可行的
[A-Z0-9!@#$%^&*()_+|\/?><\~"№;:\'*]+(?=/|$)
[A-Z0-9!@$%^&*()在字符类内转义并不困难,只有^
(仅在第一个位置)、-
(不在第一个或最后一个位置)、\
和[]
是特殊字符,而
是字符串分隔符。另外还有regex分隔符
您使用~
作为正则表达式分隔符,我认为这是字符类中的关键点,因为在使用preg_quote()
时,默认情况下不会转义分隔符
所以这应该是可行的
[A-Z0-9!@#$%^&*()_+|\/?><\~"№;:\'*]+(?=/|$)
[A-Z0-9!@$%^&*()但是,+
部分在$
之前不总是匹配吗?不会跳过它们之间的所有斜杠吗?@Birei如果有斜杠,则为“U”标志)将结束+
匹配抱歉。我当时不知道这个选项。我以为这是用+?
完成的,就像在大多数其他语言中一样。但是,+
部分在$
之前不总是匹配吗?不会跳过它们之间的所有斜杠吗?@Birei如果有斜杠,则为“U”标志)将结束+
比赛抱歉。我不知道这个选项。我以为这是用+?
完成的,就像其他大多数语言一样。