Регулярное выражение, проверяющее, что строка не должна начинаться или заканчиваться пробелом и не должна заканчиваться точкой (.)
В соответствии с требованием мне нужно сгенерировать регулярное выражение, чтобы соответствовать строке, которая не начинается или заканчивается пробелом. Кроме того, строка не должна заканчиваться точкой специального символа (.). Согласно моему пониманию, я сгенерировал регулярное выражение "\\S(.*\\S)?$"
которые ограничивают строку, которая имеет пробел в начале и в конце строки. С этим выражением мне нужно проверить регулярное выражение для строки, которая заканчивается точкой. Любая помощь будет оценена.
2 ответа
Используйте следующее регулярное выражение
^\S.*[^.\s]$
Если вы хотите сопоставить один символ, то вы можете использовать упреждающий просмотр и обратное утверждение.
^(?=\S).+(?<=[^.\s])$
Если оглядка не поддерживается, используйте
^(?=\S).*[^.\s]$
Вы можете использовать шаблон: ^[^\ ].*[^\ .]$
Вот демонстрация:
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add(" This string starts with a space");
list.add("This string ends with a space ");
list.add("This string ends with a dot.");
list.add("This string ends with a newline\n");
list.add("\tThis string starts with a tab character");
Pattern p = Pattern.compile("^[^\\ ].*[^\\ .]$");
for (String s : list) {
Matcher m = p.matcher(s);
if (m.find())
System.out.printf("\"%s\" - Passed!\n", s);
else
System.out.printf("\"%s\" - Didn't pass!\n", s);
}
}
}
Это производит:
" This string starts with a space" - Didn't pass!
"This string ends with a space " - Didn't pass!
"This string ends with a dot." - Didn't pass!
"This string ends with a newline
" - Passed!
" This string starts with a tab character" - Passed!