我有以下两个表达式。两者几乎相同,首先我检查以 3 个破折号结尾的字符串,然后检查以 3 个下划线结尾的字符串
$str="this-is_normal-test---";
$str= preg_match("/[a-zA-z0-9]+(-+)$/",$str,$matches);
print_r($matches);
$str="this-is_normal-test___";
$str= preg_match("/[a-zA-z0-9]+(_+)$/",$str,$matches);
print_r($matches);
这是输出:
Array
(
[0] => test---
[1] => ---
)
Array
(
[0] => test___
[1] => _
)
问题是,第一个显示所有三个匹配的破折号,第二个显示只匹配一个下划线。为什么?这种奇怪行为的逻辑/发生情况是什么?
最佳答案
在 US-ASCII(和大多数派生编码)中,[A-z]
范围包括 _
但不包括 -
:
echo implode('', range('A', 'z'));
ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz
我想这是一个打字错误,你的意思是:
'/[a-z0-9]+(-+)$/i'
关于php - 破折号和下划线的 preg_match 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23384202/