الفرق بين المراجعتين لصفحة: «Ruby/File/fnmatch»
جميل-بيلوني (نقاش | مساهمات) إنشاء الصفحة. |
جميل-بيلوني (نقاش | مساهمات) إضافة شرح |
||
سطر 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 lang="ruby">fnmatch( pattern, path, [flags] ) → (true or false) | ||
fnmatch?( pattern, path, [flags] ) → (true or false)</syntaxhighlight> | 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: | سطر 98: | ||
==انظر أيضا== | ==انظر أيضا== | ||
* التابع <code>[[Ruby/File/blockdev-3F|blockdev?]]</code>: يتحقق إن كان ملفٌ ما هو جهاز كتلي (block device). | |||
* التابع <code>[[Ruby/File/chardev-3F|chardev?]]</code>: يتحقق إن كان ملفٌ ما هو جهاز محرفي (character device). | |||
* التابع <code>[[Ruby/File/exist-3F|exist?]]</code>: يتحقق إن كان ملفٌ ما موجودًا. | |||
* التابع <code>[[Ruby/File/fnmatch-3F|fnmatch?]]</code>: يتحقق من تطابق مسار مع نمط محدَّد. | |||
==مصادر== | ==مصادر== |
المراجعة الحالية بتاريخ 13:19، 28 نوفمبر 2018
يتحقق التابع fnmatch
من تطابق مسار مع نمط محدَّد. هذا النمط ليس تعبيرًا نظاميًّا بل يتبع قواعد مشابهة لتعميم أسماء الملفات في الصدفة.
البنية العامة
fnmatch( pattern, path, [flags] ) → (true or false)
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
انظر أيضا
- التابع
blockdev?
: يتحقق إن كان ملفٌ ما هو جهاز كتلي (block device). - التابع
chardev?
: يتحقق إن كان ملفٌ ما هو جهاز محرفي (character device). - التابع
exist?
: يتحقق إن كان ملفٌ ما موجودًا.
- التابع
fnmatch?
: يتحقق من تطابق مسار مع نمط محدَّد.