2016-04-15 2 views
4

Это вопрос о ответе, заданном в вопросе Check a string to see if all characters are hexadecimal values.Якоря в регулярных выражениях .NET.

Предложенное регулярное выражение выглядит следующим образом:

\A\b[0-9a-fA-F]+\b\Z 

Теперь \A и \Z, кажется, что эквивалентно ^ и $ соответственно. \Z ведет себя по-другому, тем самым он позволяет использовать символ новой строки после его сопоставления (это может быть или не предназначено).

Я не понимаю, почему используется якорь \b «матч на границе слова». Разве это не начало/конец строки всегда границы слова?

В конечном счете, регулярное выражение может быть переписано как ^[0-9a-fA-F]$ с таким же поведением (игнорируя проблему \n). Я что-то упускаю? Используется ли \b для какого-то странного края?

Тестовые:

123ABC -> true 
123def -> Returns true 
123g -> Returns false 
+0

Да, я не могу придумать ничего, что выполнил '\ b'. – smead

ответ

1

В word boundary \b матчах между не-словами и символами слова, а также в начале строки, если первый символ является символом слова, и в конце концов, если последний символ является символом слова.

Таким образом, \A\b[0-9a-fA-F]+\b\Z равно \A[0-9a-fA-F]+\Z, потому что все символы в строке должны быть символы слова ([0-9] цифры или буквы) [a-fA-F] для шаблона, чтобы соответствовать его.

В данном случае это была бы другая история: \A\b[0-9a-fA-F-]+\b\Z, которая будет соответствовать только строкам со словами в начале и конце.

Используйте \z, чтобы соответствовать целой строке, без \n разрешено в конце.

Смежные вопросы