সাবএক্সপ্রেশন/মেটাক্যারেক্টার "\B" নন-ওয়ার্ড বাউন্ডারি ম্যাচ করে। অর্থাৎ, এমন পজিশন যেখানে একপাশে ওয়ার্ড ক্যারেক্টার (a-z, A-Z, 0-9, _) আছে এবং অন্য পাশেও ওয়ার্ড ক্যারেক্টার আছে — বা দুপাশে নন-ওয়ার্ড ক্যারেক্টার আছে।
উদাহরণ ১: "cause" শব্দের নন-ওয়ার্ড বাউন্ডারি ম্যাচ
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample {
public static void main(String args[]) {
String regex = "\\Bcause";
Scanner sc = new Scanner(System.in);
System.out.println("একটি স্ট্রিং দিন: ");
String input = sc.nextLine();
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
int count = 0;
while (m.find()) {
count++;
}
System.out.println("ম্যাচের সংখ্যা: " + count);
}
}
আউটপুট
একটি স্ট্রিং দিন: A sentence doesn't end with because because, because is a conjunction ম্যাচের সংখ্যা: 3
ব্যাখ্যা: "because" শব্দটি ৩বার এসেছে, কিন্তু প্রথম "because" (because,) এবং দ্বিতীয় "because" (because is) — দুটোর শুরুতে নন-ওয়ার্ড বাউন্ডারি আছে (পূর্বের ক্যারেক্টার স্পেস/কমা, পরের ক্যারেক্টার 'b' — উভয়ই ওয়ার্ড ক্যারেক্টার নয়)। তৃতীয় "because" (doesn't end with because) — এখানেও স্পেস পরে 'b'।
উদাহরণ ২: সকল নন-ওয়ার্ড বাউন্ডারি গণনা
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String args[]) {
System.out.println("ইনপুট স্ট্রিং দিন: ");
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
String regex = "\\B";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
int count = 0;
System.out.println("নন-ওয়ার্ড বাউন্ডারিগুলো: ");
while (matcher.find()) {
count++;
}
System.out.println(count);
}
}
আউটপুট
ইনপুট স্ট্রিং দিন: Hello how are you welcome to Tutorialspoint নন-ওয়ার্ড বাউন্ডারিগুলো: 30
নোট: \b (ওয়ার্ড বাউন্ডারি) এবং \B (নন-ওয়ার্ড বাউন্ডারি) পরস্পর কমপ্লিমেন্ট।