سؤال

كيف يمكنني مطابقة الكلمات الثلاث في السلسلة التالية مع تعبير منتظم متوافق مع بيرل؟

Word1 # $ Word2 # $ Word3

لا أعرف الكلمات الفعلية "Word1 و Word2 و Word3" مقدما. أنا أعرف فقط الفاصل، وهو # $.

ولا يمكنني استخدام حدود الكلمة لأن لدي ترميز متعدد البياضات. هذه الوسيلة على سبيل المثال أن السلسلة يمكن أن تحتوي على أحرف غير ASCII مثل Umlauts والتي لم يتم الكشف عنها بواسطة حرف التحكم W.

هل كانت مفيدة؟

المحلول

جرب هذا التعبير العادي:

/(\w+)#\$(\w+)#\$(\w+)/

يحرربعد شريط لنا بمزيد من المعلومات (انظر التعليقات على هذه الإجابة):

/((?:[^#]+|#[^$])*)#\$((?:[^#]+|#[^$])*)#\$((?:[^#]+|#[^$])*)/

نصائح أخرى

#!/usr/bin/perl

use strict;
use warnings;

my $x = 'word1#$word2#$word3';
print $_, "\n" for split /#\$/, $x;
$str = explode('#$', $str);

Regex مبهج لهذا.

قد تكون وظيفة الانقسام مفيدة على الرغم من أنها تعتمد على ما تريد القيام به مع الخط.

هنا مثال على الرغم من.

my $line = "word1#$word2#$word3"
my @words = split('#$', $line)

هذا سيعمل لأي سلسلة لديها 2 #

/([^#]+)\#\$([^#]+)\#\$([^#]+)/
/([^#]*?)#\$([^#]*?)#\$([^#]*)/
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top