PatternSyntaxException یک Exception Unchecked است که خطای نحوی در الگوی عبارت باقاعده را نشان میدهد. کلاس PatternSyntaxException متدهای زیر را برای کمک به شناسایی مشکل ارائه میدهد:
public String getDescription() توضیحات خطا را بازیابی میکند.public int getIndex() ایندکس خطا را بازیابی میکند.public String getPattern() الگوی عبارت باقاعدهی نادرست را بازیابی میکند.public String getMessage() یک رشتهی چندخطی شامل توضیحات خطای نحوی و ایندکس آن، الگوی عبارت باقاعدهی نادرست، و نمایش بصری ایندکس خطا در الگو برمیگرداند.کد منبع زیر Test Harness قبلی را برای بررسی عبارات باقاعدهی نادرست بهروز میکند:
import java.io.Console;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.util.regex.PatternSyntaxException;
public class RegexTestHarness2 {
public static void main(String[] args) {
Pattern pattern = null;
Matcher matcher = null;
Console console = System.console();
if (console == null) {
System.err.println("No console.");
System.exit(1);
}
while (true) {
try{
pattern =
Pattern.compile(console.readLine("%nEnter your regex: "));
matcher =
pattern.matcher(console.readLine("Enter input string to search: "));
}
catch(PatternSyntaxException pse){
console.format("There is a problem" +
" with the regular expression!%n");
console.format("The pattern in question is: %s%n",
pse.getPattern());
console.format("The description is: %s%n",
pse.getDescription());
console.format("The message is: %s%n",
pse.getMessage());
console.format("The index is: %s%n",
pse.getIndex());
System.exit(0);
}
boolean found = false;
while (matcher.find()) {
console.format("I found the text" +
" \\\"%s\\\" starting at " +
"index %d and ending at index %d.%n",
matcher.group(),
matcher.start(),
matcher.end());
found = true;
}
if(!found){
console.format("No match found.%n");
}
}
}
}
برای اجرای این تست، ?i)foo را بهعنوان عبارت باقاعده وارد کنید. این اشتباه سناریوی رایجی است که برنامهنویس پرانتز باز در عبارت Embedded Flag (?i) را فراموش کرده است. خروجی زیر تولید میشود:
Enter your regex: ?i)
There is a problem with the regular expression!
The pattern in question is: ?i)
The description is: Dangling meta character '?'
The message is: Dangling meta character '?' near index 0
?i)
^
The index is: 0
از این خروجی میتوان دید که خطای نحوی یک متاکاراکتر معلق (علامت سؤال) در ایندکس ۰ است. پرانتز باز گمشده عامل این مشکل است.
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: https://dev.java/learn/