# فناوری جاوا > برنامه‌نویسی جاوا >  نوشتن عبارت منظم

## mani2000

سلام . من میخوام برای حذف لینک اینترنتی از متن عبارت منظم بنویسم . هر مدلی مینویسم کل متن پاک میشه
کسی میتونه کمکم کنه؟

----------


## vahid-p

کدتون رو قرار بدید

----------


## mani2000

سلام
من میخوام اینو مثلا حذف کنم
https;/t.co/hjgjh
نوشتم
https;//a-z.a-z/a-z
همه حذف شد!!
یا 
این
(?<=href=").+?(?=")
فقط h رو پاک کرد

----------


## mani2000

سلام
کسی نمیدونه؟

----------


## vahid-p

البته گفتم کدتون رو بذارید نه فقط regex، همچینن لینک اینترنتی رو اشتباه نوشتید. با این حال عبارت منظم لینک اینترنتی ساختارهای پیچیده تری هم داره برای همین بهتره از یک وبسایت معتبر عبارت منظمش رو بگیرید (برای url, email,... وجود داره)
اما بر اساس این لینک (هر چند قابل اتکا نیست و جهت مثال مطرح می کنم): https://stackoverflow.com/questions/...ext-using-java

مثال:
import java.util.regex.Matcher;import java.util.regex.Pattern;


public class Main {
    public static void main(String[] args) {
        String text = "Hi, visit my website at https: //t.co/hjgjh , hope you like it";
        String textWithoutUrl = removeUrl(text);
        System.out.println(textWithoutUrl);
    }
    
    public static String removeUrl(String commentstr)
    {
        String urlPattern = "((https?|ftp|gopher|telnet|file|Unsure|http):  ((//)|(\\\\))+[\\w\\d:#@%/;$()~_?\\+-=\\\\\\.&]*)";
        Pattern p = Pattern.compile(urlPattern,Pattern.CASE_INSENSITIV  E);
        Matcher m = p.matcher(commentstr);
        int i = 0;
        while (m.find()) {
            commentstr = commentstr.replaceAll(m.group(i),"").trim();
            i++;
        }
        return commentstr;
    }
}

توجه کنید، لینک داخل متن، بین https: و // فاصله گذاشتم چون موقع پست کردن کد رو خراب میکرد. اگر کپی پیست کردید، اون فاصله رو حذف کنید.

خروجی:
Hi, visit my website at  , hope you like it

----------


## vahid-p

جهت تکمیل. کد بالا نمیتونه www.google.com رو حذف کنه. در کل regex برای url هم یکم سرچ بیشتر میخواد که کدوم جامعتره و اون رو استفاده کنید. با این حال، بر اساس این لینک https://code.tutsplus.com/tutorials/...know--net-6149 عبارت منظم زیر رو پیشنهاد کرده:
^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$
که در کد به صورت زیر قرار بدیم:
        String urlPattern = "((https?:\\/\\/)?([\\da-z\\.-]+)\\.([a-z\\.]{2,6})([\\/\\w \\.-]*)*\\/?)";

اونوقت اگر ورودی
Hi, see my website at https://t.co/hjgjh , hope you like it or visit www.google.com
باشه، خروجی میشه:
Hi, see my website at , hope you like it or visit

هر چند واضحه اگر لینکی به صورت ftp://google.com باشه، ftp:// حذف نمیشه. یا file:// و... . یکم نیاز به جستجو بیشتر دارید تا ببینید چیو دقیقا میخواید و کدوم باهاش همخوانی داره. ممکنه هم یکی حالت کلی براش مهم باشه و محدود نکنه به پروتکل های شناخته شده و مهم نباشه http باشه یا ali یا ahmad و... ! یعنی حساس به پروتکل نباشه.
موفق باشید

----------


## mani2000

سلام

خیلی ممنونم

با تشکر فراوان

----------


## vahid-p

فایل اکسلتون اگر csv باشه یا به عبارتی سطرها با ویرگول مشخص شدند که مثل هر فایل تکست دیگه ای میشه خوند و عبارات با ویرگول جدا شدند.
آموزشش به انگلیسی که فراوون هست، اما به فارسی هم پیدا میشه:
https://oruji.org/java/csv/read/


اگر هم فرمت xlsx است باید از کتابخونه برای اینکار استفاده کنید که با سرچ میتونید نمونه هاییش رو مثل نمونه زیر پیدا کنید:
https://github.com/monitorjbl/excel-streaming-reader

صد البته کار کردن باهاشون یکم وقت گذاشتن و مطالعه مستنداتش رو میخواد.

ضمنا سوالتون تشابه خاصی با سوال این تاپیک ( https://barnamenevis.org/showthread.php?547798 ) داره و شاید بتونید به هم کمک کنید!

----------


## mani2000

سلام. ممنون از راهنمایی تون
من با کتابخانه جاوا امتحان کردم
اما خطا داره
ممنون میشم راهنمایی کنید

ex.rar

----------


## vahid-p

> سلام. ممنون از راهنمایی تون
> من با کتابخانه جاوا امتحان کردم طبق این لینک
> http://www.seleniumeasy.com/jxl-tuto...ile-using-java
> اما خطا داره
> ممنون میشم راهنمایی کنید
> خطا
> Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
>     ReadExcelFile cannot be resolved to a type
>     ReadExcelFile cannot be resolved to a type
> ...


من کدتون رو بررسی نکردم ولی با توجه به لینکی که دادید گفته:



> As we know JXL doesn't support Excel 2007 ".xlsx" file format. It only supports the old BIFF (binary) ".xls" format. Where as Apache POI supports both Excel 2003 - xls and Excel 2007 - xlsx file formats.


یعنی نسخه های جدید با فرمت xlsx رو پشتیبانی نمیکنه پس استفاده کردنش اشتباهه برای فرمت های جدید (و این کتابخونه خیلی قدیمیه).
بهتره از کتابخونه های دیگه استفاده کنید. که لینک یکیشو دادم در پست قبل.

همچنین اگر اجباری در استفاده از فایل xlsx ندارید از طریق برنامه excel اون رو به csv تبدیل کنید اونوقت چیزی جز یک متن جدا شده با ویرگول نیست که طبق لینک آموزشی که پست قبل لینکشو دادم میتونید سطرها و ستون هاش رو بخونید.

----------


## mani2000

ممکنه لطف کنید ببینید کدم درسته یا نه؟؟؟
هر مدلی مینویم همینه..
خواهش میکنم... :اشتباه:  :متفکر:

----------


## vahid-p

گفتم که xlsx رو پشتیبانی نمیکنه. تو کدتون هم از xlsx استفاده کردید پس جواب نمیده!

همون راه هایی که تو پست قبلی گفتم پیش بگیرید. البته با اون کتابخونه کار نکردم، ولی اگر به csv تبدیل کنید دیگه نیازی به کتابخونه ندارید و طبق آموزشی که لینکش رو دادم پیش برید.

----------


## mani2000

سلام
فایل اکسل رو خوندم و داخلش حذف کردم
چطور خروجی جدید رو در یک فایل اکسل دیگه بنویسم؟؟امکان داره؟
میشه خروجی رو بصورت جدول نشون داد؟
وقتی لینک پاک شد ، میشه جای اون بنویسم مثلا "لینک" ؟
ممنون میشم راهنمایی کنید

----------


## mani2000

سلام با این کد در تابع read 
اطلاعات رو با دو تا حلقه خوندم و لینک و پاک کردم
اما در تابع write هرچی میخوام بگم temp1 رو بنویس نمیشناسدش.. هر مدل هم سراسری تعریفش کردم باز نشد
باید چه کنم؟
ممنون میشم راهنمایی کنید.

String temp1=(sheet1.getCell(0, row).getContents() + "\t");
String textWithoutUrl = removeUrl(temp1);

در write
Label text = new Label(col, row, temp1);
writableSheet.addCell(text);
writableWorkbook.write();
یا روی temp1 خطا داره یا روی writableWorkbook و writableWorkbook

??

----------


## ghamgin

سلام
یکی راهنمایی کنه لطفا..
من هر کاری کردم نتونستم داده ها ها رو بخونم و بنویسم در اکسل
این apache pol چیه؟

----------


## vahid-p

> سلام
> فایل اکسل رو خوندم و داخلش حذف کردم
> چطور خروجی جدید رو در یک فایل اکسل دیگه بنویسم؟؟امکان داره؟
> میشه خروجی رو بصورت جدول نشون داد؟
> وقتی لینک پاک شد ، میشه جای اون بنویسم مثلا "لینک" ؟
> ممنون میشم راهنمایی کنید


اول اینکه بدون کد نمیشه تست کرد!

اما بهتره در مورد کتابخونه های غیر استاندارد جاوا در اینترنت جستجو کنید و سریعتر به جواب میرسید چون یکی دو تا نیست که بشه یکی رو پیدا کرد تسلط داشته باشه، هر چند این کتابخونه ها چیز خاصی نیست و با یکم وقت گذاشتن میشه فهمید چیا داره.

اون کتابخونه ای که گفتم excel-streaming-reader از اسمشم مشخصه که قابلیت نوشتن نداره و فقط میخونه.
اما مشخص نیست شما از کدوم استفاده کردید. اگر از apache poi استفاده کردید میتونید فایل بنویسید. تو این مثال توضیح داده: https://www.mkyong.com/java/apache-p...-file-in-java/

اگر از jxl استفاده می کنید هم که چون قدیمیه اصلا سراغش نرید که بخواد مشکل داشته باشه یا نه.
بعدشم اگر دیدید نمیتونید با این کتابخونه ها برای نوشتن کار کنید و جواب بگیرید و خطا میده، راحت csv ذخیره کنید و به راحتی با اکسل باز میشه (لینک توضیحات در مورد csv هم قبلا گذاشتم)




> سلام
> یکی راهنمایی کنه لطفا..
> من هر کاری کردم نتونستم داده ها ها رو بخونم و بنویسم در اکسل
> این apache pol چیه؟


mani2000 تونستن فایل رو بخونن و کارهایی که میخوان رو روش انجام بدن و فقط در ذخیرش مشکل دارن. فکر کنم کدشون بتونه به شما هم کمک کنه

----------


## mani2000

سلام
ممنون
فقط من از همون xls استفاده کردم.
کد رو گذاشتم ، میشه راهنمایی کنید؟ از Apache poi هر کاری کردم نتونستم استفاده کنم. ..! خواهش میکنم آقای مهندس محبت کنید و راهنمایی کنید از صبح درگیرشم. ..
میشه خروجی رو بصورت جدول نشون داد؟
وقتی لینک پاک شد ، میشه جای اون مثلا بنویسم "لینک"؟

----------


## vahid-p

> سلام
> ممنون
> فقط من از همون xls استفاده کردم.
> کد رو گذاشتم ، میشه راهنمایی کنید؟ از Apache poi هر کاری کردم نتونستم استفاده کنم. ..! خواهش میکنم آقای مهندس محبت کنید و راهنمایی کنید از صبح درگیرشم. ..
> میشه خروجی رو بصورت جدول نشون داد؟
> وقتی لینک پاک شد ، میشه جای اون مثلا بنویسم "لینک"؟


منظورم از کد، کد کامل قابل اجرا و در نتیجه قابل تست بود (بعلاوه یک فایل نمونه اکسلتون).
البته من با jxl و بقیه کار نکردم ولی با یک نمونه مقایسه کردم اون تکه کد درسته. ممکنه اشتباه جای دیگه ای باشه که با این چند خط کدی که گذاشتید نه میشه فهمید مشکل چیه و نه میشه تستش کرد.

تو لینک روبرو نحوه نوشتن یک فایل xls رو در چند خط و به صورت کوتاه توضیح داده که اول بهتره اون رو تست کنید و ببینید جواب میگیرید بعدا رو کد خودتون اعمال کنید: https://www.mkyong.com/java/jexcel-a...-file-in-java/

----------


## mani2000

سلام
ممنونم حق با شماست
الان دسترسی ندارم کد رو بفرستم
بله کدم رو دقیقا براساس لینک ارسالی شما نوشتم . من میخوام به جای مثلا عبارات توی کتیشن توی label ها، با حلقه ستون های اصلاح شده یک فایل اکسل رو بنویسم که خطا داره و نمیشناسه


??
این کل کدمه

----------


## mani2000

سلام
ممنونم حق با شماست
الان دسترسی ندارم کد رو بفرستم
بله کدم رو دقیقا براساس لینک ارسالی شما نوشتم . من میخوام به جای مثلا  عبارات توی کتیشن توی label ها، با حلقه ستون های اصلاح شده یک فایل اکسل  رو بنویسم که خطا داره و نمیشناسه

----------


## vahid-p

خیلی وقت ها مشکل چیزی هست که شما فکرشو نمیکنید و برای همین یک قسمت از کد کافی نیست.
هر چند انتظار داشتم تمام کد (پروژه) رو بذارید و با اسکرین شات (که باز هم ناقص هست) گاهی اوقات لازمه مثلا من بیام تایپ کنم و اجرا کنم ببینم مشکل چیه (که فکر نمیکنم کسی حوصله چنین کاری رو داشته باشه).

اما خوشبختانه در این مورد به خصوص خود Eclipse کامل توضیح داده مشکل چیه. میگه که WriteException رو هندل نکردید. باید در catch هاتون یکی هم اضافه کنید برای WriteException. اصلا همون چیزی که بالا اومده گزینه Add catch clause to surrounding try رو بزنید و خودش این کار رو انجام میده.

بعد گفتید



> بله کدم رو دقیقا براساس لینک ارسالی شما نوشتم


در صورتی که در اون لینکی که دادم WriteException رو catch کرده ولی شما این کار رو نکردید. برای همینه اصرار میکنم کد رو بذارید چون ممکنه بی دقتی کرده باشید که بدون داشتنش باید کلی روش بحث بشه در صورتی که از اول میشد به مشکل پی برد

----------


## mani2000

> خیلی وقت ها مشکل چیزی هست که شما فکرشو نمیکنید و برای همین یک قسمت از کد کافی نیست.
> هر چند انتظار داشتم تمام کد (پروژه) رو بذارید و با اسکرین شات (که باز هم ناقص هست) گاهی اوقات لازمه مثلا من بیام تایپ کنم و اجرا کنم ببینم مشکل چیه (که فکر نمیکنم کسی حوصله چنین کاری رو داشته باشه).
> 
> اما خوشبختانه در این مورد به خصوص خود Eclipse کامل توضیح داده مشکل چیه. میگه که WriteException رو هندل نکردید. باید در catch هاتون یکی هم اضافه کنید برای WriteException. اصلا همون چیزی که بالا اومده گزینه Add catch clause to surrounding try رو بزنید و خودش این کار رو انجام میده.
> 
> بعد گفتید
> 
> در صورتی که در اون لینکی که دادم WriteException رو catch کرده ولی شما این کار رو نکردید. برای همینه اصرار میکنم کد رو بذارید چون ممکنه بی دقتی کرده باشید که بدون داشتنش باید کلی روش بحث بشه در صورتی که از اول میشد به مشکل پی برد


سلام
ببخشید
حق با شماست
الان دسترسی ندارم کد رو بزارم
دقیقا خودم 
Add catch clause to 
surrounding try 
رو زدم اضافه کرد اما باز خطا داد. 
خواهش میکنم بگین چکار کنم..شما استادین
دیوونه ام کرده دیگه نمیدونم چی بهش اضافه کنم درست بشه. ..
ممنون میشم.

----------


## vahid-p

استاد که نیستم و اتفاقا این مشکلی که بود پایه ای بود.
به هر حال هر وقت به کدتون دسترسی داشتید و اینجا قرارش دادید (نه اسکرین شات) و قابل تست باشه، اگر متوجه مشکلش شدم، بهتون اطلاع میدم

----------


## mani2000

سلام
جناب مهندس یه مشکل پیش آمده
دو روز هست درگیر هستم اما نتونستم درستش کنم
اینکه وقتی عبارت منظم که لطف کردید دادین رو استفاده میکنم
کلماتی که بعدش سه نقطه هست
مثل
About...
در متن باشه.  به همراه لینک ها حذف میشن
کل about...
 حذف میشه.
باید چه کنم که لینک حذف بشه و این کلمه بمونه و اون سه نقطه بعدش حذف بشه
ممنون میشم راهنمایی کنید

----------


## vahid-p

حق با شماست. regex پست شماره 6 هم مشکل داره. نمیدونم کجا میشه کاملترین و بهترین regex رو پیدا کرد.
علتش هم فکر میکنم این قسمت باشه:
([a-z,\.]{2,6})
چون مثلا about... نقطه اول رو در عبارت قبلی و دو نقطه بعد رو با این عبارت مچ میکنه. اگر به صورت زیر بنویسید:
([a-z]{2,6})
این مشکل حل میشه ولی شاید باعث به وجود اومدن موارد دیگه ای بشه.
همچنین در قسمت
([\/\w \.-]*)
یک فضای خالی (space) وجود داره که باعث میشه اگر بنویسید example.ir/sdd asas قسمت asas رو هم با این لینک یکجا در نظر میگیره و تا آخر خط میره. برای همین این space رو هم باید حذف کنید.
حتی % و # و ? هم پس از / در url مجاز هست که این regex در نظر نمیگیره. حتی : هم پس از آدرس دامنه ممکنه باشه (دیدید مینویسن example.ir:8080 و...)

مشکلات دیگه ای اگر داشته باشه نمیدونم. در کل regex نوشتن برای این مواردی که حالات مختلف زیادی دارن چندان ساده نیست. لااقل من تعریف دقیق فرمت یک url رو نمیدونم.

----------


## mani2000

سلام
ممنون مهندس
فقط 
امکان داره اول لینک ها با همون عبارتی که دادید حذف بشه بعد با یک عبارت منظم دیگه فرمت www.google.com/hjjhg
حذف بشه؟
عبارتی برای فرمتwww.google.com/hjjhg دارید؟
ممنون

----------


## vahid-p

> امکان داره اول لینک ها با همون عبارتی که دادید حذف بشه بعد با یک عبارت منظم دیگه فرمت www.google.com/hjjhg
> حذف بشه؟
> عبارتی برای فرمتwww.google.com/hjjhg دارید؟
> ممنون


همون عبارت این فرمتی که گفتید هم حذف میکنه.
این مثال رو ببینید: https://regexr.com/3ouav
تو این سایت میتونید هر عبارتی رو تست کنید. قطعا یکبار که عباراتی رو حذف کردید و نتیجه یک string باشه، خب چرا نشه دوباره همین کار رو با یک عبارت regex دیگه انجام داد؟ فرقی نمیکنه

----------


## mani2000

سلام
آقای مهندس
ممنون از راهنمائی شما
الان من میخوام کلماتی مثل Ic رو با i see جایگزین کنم .
با عبارت منظم امکانش هست؟ 
من نوشتم
ReplaceAll ("ic","I see");
اما میاد کل Ic های موجود در بقیه کلمات رو هم حذف و با i see  جایگزین می کنه. 
باید چه کنم که آنهایی که کلمه Ic هستند رو جایگزین کنه.؟
ممنون میشم راهنمایی کنید

----------


## farhad_shiri_ex

> سلام
> آقای مهندس
> ممنون از راهنمائی شما
> الان من میخوام کلماتی مثل Ic رو با i see جایگزین کنم .
> با عبارت منظم امکانش هست؟ 
> من نوشتم
> ReplaceAll ("ic","I see");
> اما میاد کل Ic های موجود در بقیه کلمات رو هم حذف و با i see  جایگزین می کنه. 
> باید چه کنم که آنهایی که کلمه Ic هستند رو جایگزین کنه.؟
> ممنون میشم راهنمایی کنید


دوست عزیز!
بهتره برای اینکه بتونید با عبارت های با قاعده Regular expression بهتر کار کنید تو همین گوگل جستجو کنید فیلم های آموزشی زیادی هست که میتونید استفاده کنید البته به زبان جاوا اسکریپت بیشتر هست ولی تفاوتی زیادی نداره فقط کلاس هاشون فرق میکنه وگرنه Regex کلا به یک قاعده استفاده میشه!
مطمن باشید مشکلتون حل میشه!

----------


## mani2000

سلام
  ممنون از شما
بله من برای یک کلمه میتونم انجام بدم
اما نمیدونم برای یک متن بلند و چندین کلمه چطور چک کنم
من لیست کلماتی که باید به جای مخفف جایگزین بشن رو دارم
اما نمیدونم چطور توی برنامه متنم رو با فایل لیست کلمات مقایسه و جایگزین کنم؟
ممنون میشم دوستان راهنمایی بفرمایند.

----------


## farhad_shiri_ex

> سلام
>   ممنون از شما
> بله من برای یک کلمه میتونم انجام بدم
> اما نمیدونم برای یک متن بلند و چندین کلمه چطور چک کنم
> من لیست کلماتی که باید به جای مخفف جایگزین بشن رو دارم
> اما نمیدونم چطور توی برنامه متنم رو با فایل لیست کلمات مقایسه و جایگزین کنم؟
> ممنون میشم دوستان راهنمایی بفرمایند.


کاری که شما می خواهید را می تونید با متد های کلاس String انجام بدید کافی متدهای این کلاس را مطالعه کنید ولی می تونید بایک حلقه کل رشته را جستجو کنید وحرف های مد نظر خودتون را جایگزین کنید.
معمولا از عبارتهای باقاعده برای یکپارچگی داده ها استفاده میشه مثلا کنترل کلمات وارد شده در کلمه عبور تو سمت سرور برای جلوگیری از SQL injection البته نه اینکه نشه کارهای دیگه ای باهشون کرد مثلا میتونید تو یک خط کدی بنویسید که بین اعداد جدا کننده قرار بده.

    public static String setSeparatorToNumeric(String valueStr) {
        Pattern pattern = Pattern.compile("(-?[0-9]+)([0-9]{3})");
        Matcher matcher ;
        while ((matcher = pattern.matcher(valueStr)).find(0)) {
            valueStr = matcher.replaceFirst("$1,$2");//group 1 group 2
        }
        return valueStr;
    }

----------


## mani2000

خیلی تشکر
ببینید
من یک فایل متنی دارم داخلش اینجوری نوشتم
Ic  I see
Dr direct message
.
.
.

حالا میخوام توی متن ام که اون رو اسپلیت کردم و ریختم توی ارایه . هرجا کلمه Ic بود از فایل متنی معادل اون i see رو بزاره و همین طور برای بقیه کلمات
باید چطور بنویسم؟
ممنون میشم راهنمایی کنید

----------


## mani2000

کسی میدونه مشکل چیه
؟

----------


## mani2000

کسی نیست؟؟؟؟؟؟؟؟؟؟؟
خواهش می کنم راهنمایی کنید
دو روز درگیرشم درست نمیشه...
؟؟؟؟؟؟؟؟؟؟؟؟ :اشتباه:  :متفکر:

----------


## mani2000

سلام
دوستان کسی نیست راهنمایی کنه؟ 
خواهش میکنم جناب مهندس vahid راهنمایی بفرمایید

----------


## farhad_shiri_ex

> سلام
> دوستان کسی نیست راهنمایی کنه؟ 
> خواهش میکنم جناب مهندس vahid راهنمایی بفرمایید


دوست عزیز این برنامه را دانلود کن http://www.ultrapico.com/ExpressoDownload.htm 
تو خودش کلی مثال برای آموزش REGEX هست والبته خودتم میتونی به راحتی عبارت های جدید بنویسی امکان نداره نتونی مشکلتو حل کنی.

اینم یک پیش درآمد کوچولو...
'a\'  یک زنگ هشدار تطبیق می دهد . u0007\ مقدار هگز
'b\' اگر درون یک جفت []  قرار بگیرد Back space را تطبیق خواهد داد . u0008\
't\' تطبیق یک تب در رشته. u0009\
'r\' کاراکتر Carriage Return  را در رشته تطبیق می دهد. u000D\
'v\' کاراکتر Vertical Tab  را تطبیق خواهد داد. u000B\
'f\' کاراکتر Form Feed را تطبیق می دهد. u000C\ 
'n\' کاراکتر new line را تطبیق می دهد.u000A\
'e\' یک Esc را تطبیق می دهد.u001B\
'040\' یک کاراکتر در مبنای 8 را تطبیق می دهد. 040 به یک space اشاره دارد
'x20\' یک کاراکتر در مبنای 16 را تطبیق می دهد. x20 برابر n\ می باشد.
'cC\' کاراکتر های کنترلی اسکی را تطبیق می دهد. cC اشاره به Ctrl+C دارد.
'u0020\' کاراکتر های یونیکد که به صورت هگز استفاده شده است را تطبیق می دهد وباید دقیقا چهار رقم باشد. البته در زبان PERL اینطوری استفاده میشود '{####}x\' برای یونیکد.
Meta Characters
'\' برای تطبیق فرا کاراکتر استفاده می شود مثلا در تطبیق کاراکتر * که هگز آن برابر است با x2A\ باید از این '*\' استفاده کنید.
'.' هر کاراکتری به غیر از n\ را تطبیق خواهد داد.
'-' برای تعیین یک سلسله کاراکتر پی در پی همراه با [] استفاده می شود مانند [9-0] که معادل [0123456789] می باشد.
'^' اگر در آغاز یک مجموعه باشد مقصود تطبیق هر کاراکتر به جز کاراکتر های مجموعه همراه کاراکتر ^ فوق است . در صورتی که خارج از مجموعه و در آغاز عبارت با قاعده باشد منظور تطبیق از ابتدای رشته است.
'*' صفر یا چند کاراکتر عبارت پیش از خود را تطبیق می دهد.
'+' یک ویا چند کاراکتر عبارت پیش از خود را تطبیق می دهد.
'?' این کاراکتر کاربرد های گوناگونی دارد که مهمترین آن تطبیق صفر ویا یک کاراکتر پیش از خود است.
'}' , '{' برای تعیین کمینه و بیشینه دفعات تکرار با استفاد از قالب بندی {n,m} کاربرد دارد.
'$' برای تطبیق پایان متن کاربرد دارد.
'|' خط عمود در ساختار های متناوب کاربرد دارد.
')','(' برای ایجاد زیر عبارتها و گروه بندی ارجاع به عقب و ... استفاده می شود.
'#' برای درج توضیحات در الگوها استفاده می شود.
موفق باشید

----------


## farhad_shiri_ex

> خیلی تشکر
> ببینید
> من یک فایل متنی دارم داخلش اینجوری نوشتم
> Ic  I see
> Dr direct message
> .
> .
> .
> 
> ...


این مثال  را هم امتحان کن!!!
در کل اگر بخواهی با عبارت های باقاعده مشکلت را رفع کنی باید اول یک الگو برای یافتن بدی بهش و بعد از Substitutions استفاده کنید برای عملیات جایگزینی خیلی ساده است.

public String customReplace(String valueStr) {
    Pattern pattern = Pattern.compile("(?<=\b(?<g1>i:I)c)\w+\b");
    Matcher matcher ;
    while ((matcher = pattern.matcher(valueStr)).find(0)) {
        valueStr = matcher.replaceFirst("$i see");
    }
    return valueStr;
}

----------


## mani2000

سلام
یک دنیا ممنون از لطف تون 
چک میکنم خبر میدم. ..

----------


## farhad_shiri_ex

> سلام
> یک دنیا ممنون از لطف تون 
> چک میکنم خبر میدم. ..
> فقط 
> دوستان کسی میدونه چطور میشه در متن emoji یا شکلک ها رو متن جایگزین کردن مثلا :( رو بنویسم sad یا :)  رو بنویسم laugh
> عبارت منظم برای اونها وجود داره؟
> هر مدل نوشتم به پرانتزها گیر میده...
> ممنون میشم راهنمایی کنید


دوست گرامی مبحث عبارتهای باقاعده یک کتاب 200 صفحه ای تمام این مشکل هایی که داری میتونی توش پبدا کنی یکم تحقیق کنید بد نیست.
برای استفاده از پرانتز ویا هر کاراکتری که جزیی از کامپایلر عبارتهای با قاعده باشه باید از Carriage Return کاراکتر ها استفاده کنید مثلا 'n\\' در جاوا و یا در پلتفرم NET.

----------


## mani2000

سلام
باور کنید کل کتاب رو زیرو کردم اما بعضی مواقع جواب نمیده
الان برای شکلک ها درست شد
فقط یک مورد دیگه مونده که هرکاری کردم نشد و ناچار پرسیدم
چطور کلماتی مثل

mamamama
رو به 
mama
تبدیل کنم 
یعنی فقط دوبار تکرار رو نگه دارم؟؟؟
ممنون میشم راهنمایی کنید

----------


## farhad_shiri_ex

> سلام
> باور کنید کل کتاب رو زیرو کردم اما بعضی مواقع جواب نمیده
> الان برای شکلک ها درست شد
> فقط یک مورد دیگه مونده که هرکاری کردم نشد و ناچار پرسیدم
> چطور کلماتی مثل
> 
> mamamama
> رو به 
> mama
> ...


این تکه کد همونطور که مشخصه دوتا رشته میگیره و تعداد اولین را در دومی پیدا میکنه به راحتی میتونی با یک تغییر کوچک به هدفت برسی.
موفق باشی.

StringInString4("sas","sasasas")
private static int findDupliCateString(String one, String two) {
	int cnt = 0;
	if (one == null || two == null || one.isEmpty() || two.isEmpty())
		return cnt;

	String quantifier = two.charAt(0)+"*?"+two.substring(1,two.length());
	Pattern pattern = Pattern.compile(two.length() > 1 ? quantifier : two);
	Matcher matcher = pattern.matcher(one);

	Predicate<String> sPredicate = pattern.asPredicate();
	boolean a = sPredicate.test(one);
	while (matcher.find()) cnt++;

	return cnt;
}

----------


## mani2000

سلام
تشکر
این مدلی بلدم
ببینید کلمات تکرار حرفشون مشخص نیست
ممکنه یکبار mamamama و یکبار mamama باشه و در هر صورت باید به mama تبدیل بشه. و شاید کلمات دیگه ای هم باشه ytytytyt و ...
راهی داره با عبارت منظم بشه ؟

----------


## farhad_shiri_ex

> سلام
> تشکر
> این مدلی بلدم
> ببینید کلمات تکرار حرفشون مشخص نیست
> ممکنه یکبار mamamama و یکبار mamama باشه و در هر صورت باید به mama تبدیل بشه. و شاید کلمات دیگه ای هم باشه ytytytyt و ...
> راهی داره با عبارت منظم بشه ؟


بله اگر خیلی از این تغییرات دارید و قابل شناسایی نیستند پیشنهاد میکنم از الگوریتم های هوش مصنوعی در جاوا استفاده کنید کلا خیال خودتون هم راحت کنید الان کمی سختی میکشید ولی در آینده مشکلات اینچنینی نخواهید داشت چون احتمال داره دوباره یه رشته ای را بخواهید با یک رشته دیگه جایگزین کنید.
تو الگوریتم هوش مصنوعی می تونید از تکنیک هایی استفاده کنید خود برنامه درباره این طور کلمات تصمیم بگیره از روی جداولی که در پروسه های زمانی تکمیل تر می شوند.
البته خوب در عبارتهای باقاعده مطلبی که مهم هست اینه که شما باید یک الگو براش تعریف کنید تا براساس اون برای شما خروجی ها را انتخاب کنه پس اگر بتونید الگوریتمی بنویسید که بتونه این الگو ها را پیش بینی کنه کار تمومه که اونم با الگوریتم های یادگیری ماشین می تونید.
برای شروع هم می تونید این کتاب  
برنامه نويسي هوش مصنوعي در JAVA 

و برای آموزش تصویری هم به این نگاه کنید.
آموزش جستجوی پیشرفته و هوشمند با استفاده از هوش مصنوعی

البته اینم بگم من اغلب منابعی که خودم استفاده میکنم را به اشتراک میذارم شاید خودتون جستجو کنید مطالب بهتری پیدا کنید.
درباره کتاب خوب باالطبع خیلی تئوری وکلی توضیح داده شده درباره آموزش تصویری هم که از کمپانی  Packtpub و البته زبان اصلی ولی خوب درباره الگوریتم هایی توضیح میده که مخصوص جستجو هستند وفکر کنم خیلی به کار شما بیاد.

----------


## mani2000

سلام
تشکر
کتاب رایگان سراغ دارید؟

----------

