ما هي أفضل طريقة لمطابقة الحروف فقط في regex؟
سؤال
أرغب حقًا في استخدام W ، لكنه يتطابق أيضًا مع السطح ، لذا فأنا ذاهب مع [A-ZA-Z] الذي يشعر بأنه مطوّل غير ضروري وأمريكا. هل هناك طريقة أفضل للقيام بذلك؟ شيء مثل [ w^_] (أشك في أنني حصلت على هذا الجملة الصحيح)؟
المحلول
يمكنك استخدام /[a-z]/i
أو /[[:alpha:]]/
فقط كذلك. في الواقع، \w
يتضمن الأرقام حتى لا تعمل.
نصائح أخرى
ربما تقصد /[[:alpha:]]/
؟ نرى بيرلري لمناقشة فصول شخصية POSIX.
فقط استخدم \p{L}
وهو ما يعني "أي حرف Unicode" ويعمل في Perl (/\p{L}/
). ربما تحتاج إلى use utf8;
.
إن مطابقة الشخصيات الدولية (IE غير ASCII) أمر صعب ، ويمكن أن يعتمد على الكثير من الأشياء. تحقق من هذا المثال:
#!perl -w
use strict;
use utf8;
my $string = "ä";
print "matched :alpha:\n" if $string =~ /[[:alpha:]]/;
print "matched ^\\W0-9_\n" if $string =~ /[^\W0-9_]/;
print "matched [a-zA-Z]\n" if $string =~ /[a-zA-Z]/;
print "matched [a-z]i\n" if $string =~ /[a-z]/i;
print "matched [A-z]\n" if $string =~ /[A-z]/;
بالنسبة لي هذا ينتج
matched :alpha:
إذا قمت بإزالة use utf8
ثم أي من التعبيرات العادية تطابق.
انظر الى هذا السؤال ذي الصلة جدا, ، يبدو أنك ربما تريد ذلك use utf8
وتحقق يونيكود :: دلالات.
بالطبع ، إذا كنت تستخدم أحرف ASCII المستقيمة من أي من التعبيرات العادية المذكورة أعلاه ، فستعمل.
[^\W0-9_]
# or
[[:alpha:]]
انظر بيرلوك بيرلري
بعض الخيارات:
1. /[a-z]/i # case insensitive
2. /[A-Z]/i # case insensitive
3. /[A-z]/ # explicit range listing (capital 'A' to lowercase 'z')
4. /[[:alpha:]]/ # POSIX alpha character class
أوصي باستخدام إما حالة غير حساسة ، أو الطريقة الحقيقية /[a-zA-z]/
, ، ما لم يكن لديك تفضيل لغة معينة في الاعتبار.
ملحوظة:
- يتطلب الرقم 3 رأس المال "أولاً ثم صغيرًا" Z "بسبب ترتيب قيم ASCII ؛ لا يعمل إذا قمت بالعكس:
a-Z
. ايضا: هذه الطريقة ستفشل في معايير عدم الاستدلال ، لأنها تشمل [ \ ] ^ _ ` . - سوف يتطابق الرقم 4 مع أحرف اللغة الإضافية هذه ، لكنه يتطابق أيضًا مع:
ʹʺʻˍˎˏːˑˬˮ̀́
(بالإضافة إلى العديد من الآخرين)
هل تبحث عن التدويل في regex الخاص بك؟ ثم ستحتاج إلى فعل شيء مثل هذا الرجل: قضية التحقق من صحة JavaScript مع الشخصيات الدولية
تطابق صراحة على جميع رسائل لغة القمر :)