الفرق بين المراجعتين ل"Ruby/File/fnmatch-3F"
اذهب إلى التنقل
اذهب إلى البحث
جميل-بيلوني (نقاش | مساهمات) (إنشاء الصفحة.) |
جميل-بيلوني (نقاش | مساهمات) (إضافة شرح) |
||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE: التابع <code>File.fnmatch?</code> في روبي}}</noinclude> | <noinclude>{{DISPLAYTITLE: التابع <code>File.fnmatch?</code> في روبي}}</noinclude> | ||
− | + | يتحقق التابع <code>fnmatch?</code> من تطابق مسار مع نمط محدَّد. هذا النمط ليس [[Ruby/Regexp|تعبيرًا نظاميًّا]] بل يتبع قواعد مشابهة لتعميم أسماء الملفات في الصدفة. | |
==البنية العامة== | ==البنية العامة== | ||
<syntaxhighlight lang="ruby">fnmatch?( pattern, path, [flags] ) → (true or false)</syntaxhighlight> | <syntaxhighlight lang="ruby">fnmatch?( pattern, path, [flags] ) → (true or false)</syntaxhighlight> | ||
+ | |||
+ | ==المعاملات== | ||
+ | |||
+ | === <code>pattern</code> === | ||
+ | النمط المراد منه مطابقة المسار <code>path</code> المعطى. يمكن أن يحتوي على المحارف الخاصَّة (metacharacters، أو تدعى محارف الصدفة أيضًا) التالية: | ||
+ | {| class="wikitable" | ||
+ | !المحرف الخاص | ||
+ | !الوصف | ||
+ | |- | ||
+ | |<code>*</code> | ||
+ | |يطابق أي ملف. يمكن أن يُقيَّد بقيم أخرى في النطاق العام (glob). هذا المحرف يقابل <code>/ * /x.</code> في [[Ruby/Regexp|التعابير النظامية]]. إليك بعض الأمثلة على تقييد هذا المحرف: | ||
+ | * <code>*</code>: يطابق جميع الملفات الطبيعية. | ||
+ | * <code>*c</code>: يطابق كل الملفات التي تبدأ بالحرف c. | ||
+ | * <code>c*</code>: يطابق كل الملفات التي تنتهي بالحرف c. | ||
+ | * <code>*c*</code>: يطابق جميع الملفات التي تملك الحرف c في اسمها (سواءً أكان في البداية أم في النهاية). | ||
+ | لمطابقة الملفات المخفية (التي تبدأ بنقط <code>.</code>)، فحدِّد الراية <code>File::FNM_DOTMATCH</code> للمعامل <code>flag</code>. | ||
+ | |- | ||
+ | |<code>**</code> | ||
+ | |يطابق المجلدات بشكل تعاودي (recursively) أو الملفات بشكل توسعي (expansively). | ||
+ | |- | ||
+ | |<code>?</code> | ||
+ | |يطابق محرفًا واحدًا فقط. هذا المحرف يقابل <code>/.{1}/</code> في [[Ruby/Regexp|التعابير النظامية]]. | ||
+ | |- | ||
+ | |<code>[]</code> | ||
+ | |يطابق أي محرف موجود داخل القوسين المعقوفين. هذان القوسان يسلكان نفس سلوك القوسين المقابلين لهما في [[Ruby/Regexp|التعابير النظامية]]. | ||
+ | |- | ||
+ | |<code>\</code> | ||
+ | |يعد هذا المحرف محرف تهريب للمحرف الخاص الذي يأتي بعده. | ||
+ | |- | ||
+ | |<code>{a,b}</code> | ||
+ | |يطابق النمط الحرف a أو الحرف b إذا كان المعامل <code>flag</code> مضبوطًا إلى الراية <code>File::FNM_EXTGLOB</code>. هذا النمط يسلك نفس سلوك [[Ruby/Regexp|التعابير النظامية]] (<code><nowiki>(?:a|b)</nowiki></code>). | ||
+ | |} | ||
+ | |||
+ | === <code>path</code> === | ||
+ | مسار الملف المراد مطابقته. | ||
+ | |||
+ | === <code>flags</code> === | ||
+ | الرايات المستعملة لضبط عملية المطابقة. يمكن جمع عدة رايات عبر تطبيق العملية OR الثنائية على الثوابت <code>FNM_XXX</code>. يستعمل نفس النمط العمومي والرايات عبر التابع <code>[[Ruby/Dir/glob|Dir.glob]]</code>. | ||
==القيمة المعادة== | ==القيمة المعادة== | ||
− | + | تعاد القيمة <code>true</code> إن تطابق المسار <code>path</code> مع النمط <code>pattern</code>. خلا ذلك، تعاد القيمة <code>false</code>. | |
− | |||
==أمثلة== | ==أمثلة== | ||
مثال على استعمال التابع <code>fnmatch?</code>: | مثال على استعمال التابع <code>fnmatch?</code>: | ||
سطر 60: | سطر 97: | ||
==انظر أيضا== | ==انظر أيضا== | ||
+ | * التابع <code>[[Ruby/File/directory-3F|directory?]]</code>: يتحقق إن كان ملفٌ ما مجلَّدًا أو وصلةً رمزيًّةً تشير إلى مجلدٍ. | ||
+ | * التابع <code>[[Ruby/File/executable-3F|executable?]]</code>: يتحقق إن كان ملفٌ ما قابلًا للتنفيذ من طرف المعرِّف الفعلي للمستخدم المالك والمجموعة المالكة للعملية الحالية. | ||
+ | |||
+ | * التابع <code>[[Ruby/File/fnmatch|fnmatch]]</code>: يتحقق من تطابق مسار مع نمط محدَّد. | ||
==مصادر== | ==مصادر== |
المراجعة الحالية بتاريخ 13:20، 28 نوفمبر 2018
يتحقق التابع fnmatch?
من تطابق مسار مع نمط محدَّد. هذا النمط ليس تعبيرًا نظاميًّا بل يتبع قواعد مشابهة لتعميم أسماء الملفات في الصدفة.
البنية العامة
fnmatch?( pattern, path, [flags] ) → (true or false)
المعاملات
pattern
النمط المراد منه مطابقة المسار path
المعطى. يمكن أن يحتوي على المحارف الخاصَّة (metacharacters، أو تدعى محارف الصدفة أيضًا) التالية:
المحرف الخاص | الوصف |
---|---|
*
|
يطابق أي ملف. يمكن أن يُقيَّد بقيم أخرى في النطاق العام (glob). هذا المحرف يقابل / * /x. في التعابير النظامية. إليك بعض الأمثلة على تقييد هذا المحرف:
لمطابقة الملفات المخفية (التي تبدأ بنقط |
**
|
يطابق المجلدات بشكل تعاودي (recursively) أو الملفات بشكل توسعي (expansively). |
?
|
يطابق محرفًا واحدًا فقط. هذا المحرف يقابل /.{1}/ في التعابير النظامية.
|
[]
|
يطابق أي محرف موجود داخل القوسين المعقوفين. هذان القوسان يسلكان نفس سلوك القوسين المقابلين لهما في التعابير النظامية. |
\
|
يعد هذا المحرف محرف تهريب للمحرف الخاص الذي يأتي بعده. |
{a,b}
|
يطابق النمط الحرف a أو الحرف b إذا كان المعامل flag مضبوطًا إلى الراية File::FNM_EXTGLOB . هذا النمط يسلك نفس سلوك التعابير النظامية ((?:a|b) ).
|
path
مسار الملف المراد مطابقته.
flags
الرايات المستعملة لضبط عملية المطابقة. يمكن جمع عدة رايات عبر تطبيق العملية OR الثنائية على الثوابت FNM_XXX
. يستعمل نفس النمط العمومي والرايات عبر التابع Dir.glob
.
القيمة المعادة
تعاد القيمة true
إن تطابق المسار path
مع النمط pattern
. خلا ذلك، تعاد القيمة false
.
أمثلة
مثال على استعمال التابع fnmatch?
:
File.fnmatch('cat', 'cat') #=> true # match entire string
File.fnmatch('cat', 'category') #=> false # only match partial string
File.fnmatch('c{at,ub}s', 'cats') #=> false # { } isn't supported by default
File.fnmatch('c{at,ub}s', 'cats', File::FNM_EXTGLOB) #=> true # { } is supported on FNM_EXTGLOB
File.fnmatch('c?t', 'cat') #=> true # '?' match only 1 character
File.fnmatch('c??t', 'cat') #=> false # ditto
File.fnmatch('c*', 'cats') #=> true # '*' match 0 or more characters
File.fnmatch('c*t', 'c/a/b/t') #=> true # ditto
File.fnmatch('ca[a-z]', 'cat') #=> true # inclusive bracket expression
File.fnmatch('ca[^t]', 'cat') #=> false # exclusive bracket expression ('^' or '!')
File.fnmatch('cat', 'CAT') #=> false # case sensitive
File.fnmatch('cat', 'CAT', File::FNM_CASEFOLD) #=> true # case insensitive
File.fnmatch('?', '/', File::FNM_PATHNAME) #=> false # wildcard doesn't match '/' on FNM_PATHNAME
File.fnmatch('*', '/', File::FNM_PATHNAME) #=> false # ditto
File.fnmatch('[/]', '/', File::FNM_PATHNAME) #=> false # ditto
File.fnmatch('\?', '?') #=> true # escaped wildcard becomes ordinary
File.fnmatch('\a', 'a') #=> true # escaped ordinary remains ordinary
File.fnmatch('\a', '\a', File::FNM_NOESCAPE) #=> true # FNM_NOESCAPE makes '\' ordinary
File.fnmatch('[\?]', '?') #=> true # can escape inside bracket expression
File.fnmatch('*', '.profile') #=> false # wildcard doesn't match leading
File.fnmatch('*', '.profile', File::FNM_DOTMATCH) #=> true # period by default.
File.fnmatch('.*', '.profile') #=> true
rbfiles = '**' '/' '*.rb' # you don't have to do like this. just write in single string.
File.fnmatch(rbfiles, 'main.rb') #=> false
File.fnmatch(rbfiles, './main.rb') #=> false
File.fnmatch(rbfiles, 'lib/song.rb') #=> true
File.fnmatch('**.rb', 'main.rb') #=> true
File.fnmatch('**.rb', './main.rb') #=> false
File.fnmatch('**.rb', 'lib/song.rb') #=> true
File.fnmatch('*', 'dave/.profile') #=> true
pattern = '*' '/' '*'
File.fnmatch(pattern, 'dave/.profile', File::FNM_PATHNAME) #=> false
File.fnmatch(pattern, 'dave/.profile', File::FNM_PATHNAME | File::FNM_DOTMATCH) #=> true
pattern = '**' '/' 'foo'
File.fnmatch(pattern, 'a/b/c/foo', File::FNM_PATHNAME) #=> true
File.fnmatch(pattern, '/a/b/c/foo', File::FNM_PATHNAME) #=> true
File.fnmatch(pattern, 'c:/a/b/c/foo', File::FNM_PATHNAME) #=> true
File.fnmatch(pattern, 'a/.b/c/foo', File::FNM_PATHNAME) #=> false
File.fnmatch(pattern, 'a/.b/c/foo', File::FNM_PATHNAME | File::FNM_DOTMATCH) #=> true
انظر أيضا
- التابع
directory?
: يتحقق إن كان ملفٌ ما مجلَّدًا أو وصلةً رمزيًّةً تشير إلى مجلدٍ. - التابع
executable?
: يتحقق إن كان ملفٌ ما قابلًا للتنفيذ من طرف المعرِّف الفعلي للمستخدم المالك والمجموعة المالكة للعملية الحالية.
- التابع
fnmatch
: يتحقق من تطابق مسار مع نمط محدَّد.