我要验证的格式
样品
'abc' --> valid
'abc\\'def' --> valid
'abc'def' --> invalid
我尝试了什么
public static void main(String[] args) {
final Pattern pat = Pattern.compile("\\s*\\'[^']+\\'\\s*", Pattern.CASE_INSENSITIVE);
System.out.println(pat.matcher("'abc'").matches()); // Out: true
System.out.println(pat.matcher("'abc\\'def'").matches()); //Out: false, expected true
System.out.println(pat.matcher("'abc'def'").matches()); // out false
}
我对此规则有疑问:
allow a single quote in middle but it must be escaped by \\
有什么帮助吗?谢谢!
答案 0 :(得分:1)
试试这个(“纯”正则表达式形式的可读性;需要在Java字符串中转义):
\s*\'([^'\\]|\\')*\'\s*
在字符串中,我们接受任意数量的字符,这些字符不是'
或\
,或者恰好是转义序列\'
。请注意,这将禁止在其他字符前面使用反斜杠,这就是转义字符通常的工作方式。 (我还建议使用*
rater而不是+
以允许空字符串。)
答案 1 :(得分:1)
你需要
ArrayList
请参阅Java demo。
详细:
final Pattern pat = Pattern.compile("\\s*'[^'\\\\]*(?:\\\\.[^'\\\\]*)*'\\s*");
- 0+ whitespaces \s*
- 单引号'
- 除[^'\\]*
和'
\
- 零个或多个序列
(?:\\.[^'\\]*)*
- 除了换行符之外的任何转义字符(添加\\.
以匹配任何字符串换行符)Pattern.DOTALL
- 除[^'\\]*
和'
\
- 单引号'
- 0+ whitespaces