আমি বুঝতে পারছি না কেন অন্যরা কেন এইরকম জটিল নিয়মিত প্রকাশ বা এত দীর্ঘ কোডের প্রস্তাব দিচ্ছেন। মূলত, আপনি আপনার স্ট্রিং থেকে দুটি ধরণের জিনিস হস্তান্তর করতে চান: অক্ষরগুলির ক্রম যা শূন্যস্থান বা উদ্ধৃতি নয়, এবং অক্ষরের ক্রমগুলি যেগুলি শুরু হয় এবং একটি উদ্ধৃতি দিয়ে শেষ হয়, উভয় প্রকারের উদ্ধৃতি হিসাবে between আপনি এই নিয়মিত প্রকাশের সাথে সহজেই সেই জিনিসগুলির সাথে মেলে ফেলতে পারেন:
[^\s"']+|"([^"]*)"|'([^']*)'
আমি ক্যাপচারিং গ্রুপগুলি যুক্ত করেছি কারণ আপনি তালিকায় কোটগুলি চান না।
এই জাভা কোডটি তালিকাটি তৈরি করে, ক্যাপচারিং গ্রুপটি কোটগুলি বাদ দেওয়ার সাথে মিলে যায় এবং ক্যাপচারিং গ্রুপটি মেলে না তবে সামগ্রিক রেজেক্স ম্যাচ যুক্ত করে (একটি অব্যক্ত শব্দটির সাথে মেলে)।
List<String> matchList = new ArrayList<String>();
Pattern regex = Pattern.compile("[^\\s\"']+|\"([^\"]*)\"|'([^']*)'");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
if (regexMatcher.group(1) != null) {
// Add double-quoted string without the quotes
matchList.add(regexMatcher.group(1));
} else if (regexMatcher.group(2) != null) {
// Add single-quoted string without the quotes
matchList.add(regexMatcher.group(2));
} else {
// Add unquoted word
matchList.add(regexMatcher.group());
}
}
যদি আপনি ফিরে আসা তালিকায় উদ্ধৃতিগুলি রাখতে আপত্তি না করেন তবে আপনি আরও সহজ কোড ব্যবহার করতে পারেন:
List<String> matchList = new ArrayList<String>();
Pattern regex = Pattern.compile("[^\\s\"']+|\"[^\"]*\"|'[^']*'");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
matchList.add(regexMatcher.group());
}