উত্তর:
আপনি যদি রেজেক্সের কোনও বিশেষ অর্থযুক্ত বিন্দু বা অন্যান্য অক্ষরগুলি একটি সাধারণ চরিত্র হতে চান, আপনাকে ব্যাকস্ল্যাশ দিয়ে এড়িয়ে যেতে হবে। যেহেতু জাভাতে রেজিক্সগুলি সাধারণ জাভা স্ট্রিং, আপনাকে নিজেই ব্যাকস্ল্যাশ থেকে বাঁচতে হবে, সুতরাং আপনার দুটি ব্যাকস্ল্যাশ প্রয়োজন যেমন\\.
অন্যান্য সদস্যদের প্রস্তাবিত সমাধানগুলি আমার পক্ষে কাজ করে না।
তবে আমি এটি পেয়েছি:
জাভা regexp লেখায় একটি বিন্দু থেকে বাঁচতে [.]
\\.আমার জন্য কাজ করে নি: \.অভিযোগ করেন যে .পলান করা প্রয়োজন নয়, \\.তৈরি তা চিন্তা এটি ছিল \.পরিবর্তে ., \\\.এবং একটি ত্রুটি ছুড়ে ফেলে রচয়িতা, [.]শুধু কাজ ছিল।
\\.একটি স্ট্রিং আক্ষরিক ভিতরে আপনাকে দেয় \.যা রেজেক্সকে বিন্দুটিকে কোনও অক্ষরের ম্যাচের পরিবর্তে আক্ষরিক বিন্দু হিসাবে দেখতে হবে।
পার্ল-স্টাইলের নিয়মিত এক্সপ্রেশন (যা জাভা রেজেক্স ইঞ্জিনটি কমবেশি ভিত্তিতে থাকে) নিম্নলিখিত অক্ষরগুলিকে বিশেষ অক্ষর হিসাবে বিবেচনা করে:
.^$|*+?()[{\চরিত্র শ্রেণীর বাইরে বিশেষ অর্থ রয়েছে ,
]^-\অক্ষর শ্রেণীর ভিতরে বিশেষ অর্থ ( [...]) রয়েছে।
সুতরাং আপনাকে প্রসঙ্গের উপর নির্ভর করে সেই (এবং কেবলমাত্র সেগুলি) প্রতীকগুলি এড়াতে হবে (বা, চরিত্রের শ্রেণীর ক্ষেত্রে, তাদের এমন অবস্থানে রাখুন যেখানে তাদের ভুল ব্যাখ্যা করা যায় না)।
অপ্রয়োজনীয়ভাবে অন্যান্য অক্ষরগুলি থেকে পালানো কাজ করতে পারে তবে কিছু রেজেক্স ইঞ্জিন এটিকে সিনট্যাক্স ত্রুটি হিসাবে বিবেচনা করবে, উদাহরণস্বরূপ \_.NET এ ত্রুটির কারণ ঘটবে।
কিছু অন্যান্য মিথ্যা ফলাফলের দিকে পরিচালিত করবে, উদাহরণস্বরূপ পার্লকে \<আক্ষরিক হিসাবে ব্যাখ্যা করা হয়েছে <, তবে এর egrepঅর্থ "শব্দের সীমানা"।
লেখার তাই -?\d+\.\d+\$ম্যাচে 1.50$, -2.00$ইত্যাদি এবং [(){}[\]]একটি অক্ষর বর্গ যে বন্ধনী / ধনুর্বন্ধনী / প্রথম বন্ধনী সব ধরণের সাথে মেলে জন্য।
আপনার যদি কোনও ইউজার ইনপুট স্ট্রিংকে একটি রেজেক্স-নিরাপদ ফর্ম রূপান্তর করতে হয়, ব্যবহার করুন java.util.regex.Pattern.quote।
আরও পড়ুন: মেটাচার্যাকরদের থেকে পালানোর বিষয়ে জান গোয়েভার্টের ব্লগ রেগেক্সগুরু
একটি ব্যাকস্ল্যাশ দিয়ে বিশেষ অক্ষরগুলি এড়িয়ে চলুন। \., \*, \+, \\d, এবং তাই। আপনি যদি অনিশ্চিত হন তবে আপনি কোনও বর্ণমালার অক্ষরটি বিশেষ কিনা সেগুলি থেকে পালাতে পারেন। আরও তথ্যের জন্য java.util.regex.Pattern এর জাভাডোক দেখুন ।
এখানে কোড আপনি সরাসরি পেস্ট অনুলিপি করতে পারেন:
String imageName = "picture1.jpg";
String [] imageNameArray = imageName.split("\\.");
for(int i =0; i< imageNameArray.length ; i++)
{
system.out.println(imageNameArray[i]);
}
এবং যদি ভুলক্রমে "এর আগে বা পরে ফাঁকা জায়গা থাকে তবে কি হবে"। এই ক্ষেত্রে? এই স্থানগুলিকেও বিবেচনা করা সর্বদা সেরা অনুশীলন।
String imageName = "picture1 . jpg";
String [] imageNameArray = imageName.split("\\s*.\\s*");
for(int i =0; i< imageNameArray.length ; i++)
{
system.out.println(imageNameArray[i]);
}
এখানে, স্থানগুলি বিবেচনা করতে এবং আপনাকে কেবল প্রয়োজনীয় বিভক্ত স্ট্রিংগুলি দেওয়ার জন্য \\ গুলি * রয়েছে।
আমি "। *" দিয়ে শেষ হওয়া একটি স্ট্রিংয়ের সাথে মিল রাখতে চেয়েছিলাম এর জন্য আমাকে নিম্নলিখিতগুলি ব্যবহার করতে হয়েছিল:
"^.*\\.\\*$"
কিন্ডা নির্বোধ যদি আপনি এটি সম্পর্কে চিন্তা করেন: ডি হেরেস এর অর্থ কী। স্ট্রিংয়ের শুরুতে বিন্দুর পরে কোনও অক্ষর শূন্য বা তার বেশি বার হতে পারে ""। স্ট্রিংয়ের শেষে একটি তারা (*) অনুসরণ করবে।
আমি আশা করি এটি কারও কাজে আসবে। ফ্যাবিয়ানকে ব্যাকস্ল্যাশ জিনিসটির জন্য ধন্যবাদ।
"\\.\\*$"তখনই ব্যবহার করুন । স্ট্রিংটির শুরুর জন্য কোনও মিলের প্রয়োজন নেই যদি এটি আপনার পক্ষে গুরুত্বপূর্ণ না।
আপনি যদি আপনার বাক্যটি "। " দিয়ে শেষ হয় কিনা তা পরীক্ষা করে দেখতে চান তবে আপনাকে আপনার প্যাটার্নের শেষে [\। \ ] $ যুক্ত করতে হবে।