我无法获得与单个字符匹配的正则表达式。
$strings=array('hgasdfgh','a','1','addsa');
foreach($strings as $string)
{
$result=preg_match('/[a-z]/',$string);
if($result)
echo "match";
else
echo "no";}
这个代码匹配数组的第一个、第二个和第四个字符串。但我需要它只是匹配第二项(任何字符)。
试试这个表达式
^[a-z]$
^
表示字符串的开头,$
表示字符串的结尾。
/[a-z]/
这是什么意思呢?匹配a-z中的单个字符。
除了第三个数组项之外的所有数组项都满足此要求。
现在如果你要把你的正则表达式括在锚中:
/^[a-z]$/
它只匹配字符串的开头,后面跟着一个字母,后面跟着字符串的结尾,即数组中的第二个条目。
编辑:
您要求的是括号内外^的差值:
当^
在括号外时,单独表示字符串的开始。如果您转义'^
,则表示从字面上匹配字符^。
当^
在括号内时,例如:
[^a-z]
它有效地否定了这个字符类,这意味着你应该匹配的东西不是一个字符在范围a-z
。因此,这可以匹配例如9
, A
, #
等。最后,当^
在字符类中但不在第一个位置时:
[a-z^]
它失去了它的否定的特殊意义,它是一个字面的^
字符。因此字符类现在匹配a-z或^
范围内的单个字符。