انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


توزیع گنو/لینوکس اوبونتو ۲۰ ساله شد 🎉

نویسنده موضوع: تکرار در regexp (حل شد.)  (دفعات بازدید: 717 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین سید مسعود امامیان

  • Hero Member
  • *
  • ارسال: 951
تکرار در regexp (حل شد.)
« : 27 بهمن 1391، 10:16 ب‌ظ »
سلام دوستان

در یک پرونده چطوری می توان چند کلمه متوالی رو سرچ کرد ؟ برای مثال:
در یک پرونده ایی که 3تا کلمه ی test هست به این صورت :
نقل‌قول
test test test

اینجور که پیداست باید با این دستور پیدا بشه :
egrep -i "(test) \2"  address file
که خطا میده !
نقل‌قول
Invalid back reference

روش های مختلفی هست ولی با back ref می خوام انجام بشه .
« آخرین ویرایش: 27 بهمن 1391، 11:27 ب‌ظ توسط سید مسعود امامیان »
به عمل کار برآید     به سخندانی نیست . . .

آفلاین سید مسعود امامیان

  • Hero Member
  • *
  • ارسال: 951
پاسخ : تکرار در regexp
« پاسخ #1 : 27 بهمن 1391، 10:28 ب‌ظ »
با :
egrep -i "\<(test) \2\>" address file
هم تست کردم نشد !
به عمل کار برآید     به سخندانی نیست . . .

آفلاین doomhammer65ir

  • High Hero Member
  • *
  • ارسال: 1572
  • جنسیت : پسر
    • IRAN Backup
پاسخ : تکرار در regexp
« پاسخ #2 : 27 بهمن 1391، 10:46 ب‌ظ »
میخوای نخستین رخداد یک الگو رو بیابی ؟ :
http://lmgtfy.com/?q=regex+first+occurence+of+word

آفلاین سید مسعود امامیان

  • Hero Member
  • *
  • ارسال: 951
پاسخ : تکرار در regexp
« پاسخ #3 : 27 بهمن 1391، 11:01 ب‌ظ »
نه دیگه !

الان وقتی بجای 2 ، 1 بذارین :
egrep -i "\<(test) \1\>" address file
در خروجی علاوه بر testی که پیدا می کنه یک test دیگه هم پیدا می کنه!
نقل‌قول
test test

ولی وقتی 1 رو به 2 تغییر میدی انتظار میره که 3تا test پیدا کنه ! که خطایی که قبلا گفتم ظاهر میشه !
به عمل کار برآید     به سخندانی نیست . . .

آفلاین nixoeen

  • ناظر انجمن
  • *
  • ارسال: 4868
  • جنسیت : پسر
  • masoft قدیم
پاسخ : تکرار در regexp
« پاسخ #4 : 27 بهمن 1391، 11:09 ب‌ظ »
egrep -i "(test ){2}" file
توجه کنید که آخرین test هم باید یک فضای خالی بعد از خودش داشته باشه.

آفلاین سید مسعود امامیان

  • Hero Member
  • *
  • ارسال: 951
پاسخ : تکرار در regexp
« پاسخ #5 : 27 بهمن 1391، 11:14 ب‌ظ »
بله درسته nixoeen جان و من هم اشاره کردم با روش های مختلف میشه
که یکیش همین quantifierی هست که شما مثال زدید ولی با back reference
نمی دونم چرا خروجی داده نمیشه !

روش حل مساله رو نمی خوام، صرفا جهت یادگیری می خوام بدونم .
به عمل کار برآید     به سخندانی نیست . . .

آفلاین nixoeen

  • ناظر انجمن
  • *
  • ارسال: 4868
  • جنسیت : پسر
  • masoft قدیم
پاسخ : تکرار در regexp
« پاسخ #6 : 27 بهمن 1391، 11:18 ب‌ظ »
با Back Reference اینجوری می‌شه:
egrep -i "(test )\1\1" file

اون ۱ تعداد تکرار نیست، مشخص می‌کنه که کدوم Pattern قبلی استفاده بشه. در اینجا تنها یک Pattern وجود داره، در نتیجه 2\ کلا اشتباهه.
« آخرین ویرایش: 27 بهمن 1391، 11:21 ب‌ظ توسط nixoeen »

آفلاین سید مسعود امامیان

  • Hero Member
  • *
  • ارسال: 951
پاسخ : تکرار در regexp
« پاسخ #7 : 27 بهمن 1391، 11:23 ب‌ظ »
بسیار ممنونم .
« آخرین ویرایش: 27 بهمن 1391، 11:26 ب‌ظ توسط سید مسعود امامیان »
به عمل کار برآید     به سخندانی نیست . . .

آفلاین سید مسعود امامیان

  • Hero Member
  • *
  • ارسال: 951
پاسخ : تکرار در regexp (حل شد.)
« پاسخ #8 : 30 بهمن 1391، 06:07 ب‌ظ »
گفتم تاپیک جدا نزنم،

به نظرتون این برای بیرون کشیدن تمام آدرس های مختلف سایت خوبه ؟ :
"\<(http://)?(https://)?(www)?(\.)?[^ ]*\.([a-z]{1,6})?([.a-z]{1,6})?\>"

مثلا انواع مختلف آدرس ها :
http://test.dom
www.test.dom
https://www.test.dom
و...
« آخرین ویرایش: 30 بهمن 1391، 06:09 ب‌ظ توسط سید مسعود امامیان »
به عمل کار برآید     به سخندانی نیست . . .