ما هي أفضل طريقة لمطابقة الحروف فقط في regex؟

StackOverflow https://stackoverflow.com/questions/3754097

  •  04-10-2019
  •  | 
  •  

سؤال

أرغب حقًا في استخدام 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 مع الشخصيات الدولية

تطابق صراحة على جميع رسائل لغة القمر :)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top