регулярное выражение для сопоставления только одного символа - PullRequest
1 голос
/ 05 ноября 2011

Я не могу получить регулярное выражение для сопоставления с ровно одним символом.

$strings=array('hgasdfgh','a','1','addsa');
foreach($strings as $string)
{
$result=preg_match('/[a-z]/',$string);
if($result)
echo "match";
else 
echo "no";}

Этот код соответствует 1-й 2-й и 4-й строке массива. Но мне это нужно только для совпадения со вторым предметом (любой символ).

Ответы [ 2 ]

2 голосов
/ 05 ноября 2011
/[a-z]/

Так что это значит?Совпадение одного символа из az.

Все ваши записи массива, кроме третьей, удовлетворяют этому требованию.Следовательно, все совпадают.

Теперь, если вы хотите заключить свое регулярное выражение в якоря:

/^[a-z]$/

Это будет соответствовать только началу строки, за которой следует одна буква, за которой следует конецстроки, т. е. ваша вторая запись в массиве.

Редактировать:

Вы запросили разницу в ^ внутри и снаружи скобки:

Когда ^вне скобки, само по себе это означает начало строки.Если вы избегаете его \^, это означает буквальное совпадение с символом ^.

Когда ^ находится внутри скобок, таких как:

[^a-z], это фактически отрицает этот символкласс, что означает, что вы должны соответствовать чему-то, что НЕ является символом во франции a-z.Так что это может соответствовать, например, 9, A, # и т. Д. Наконец, когда ^ находится внутри класса символов, но не на первой позиции:

[a-z^] он теряет свое особое значениеотрицания, и это буквальный ^ символ.Таким образом, класс символов теперь соответствует либо одному символу из диапазона az, либо ^.

2 голосов
/ 05 ноября 2011

Попробуйте это выражение

^[a-z]$

^ указывает начало строки, а $ ее конец.

...