The format I want to validate
-
从单引号开始(左侧修剪后)
-
单引号结束(正确修剪后)
-
中间:不允许单引号或允许它但必须使用双反斜杠进行转义
Samples
'abc' --> valid
'abc\\'def' --> valid
'abc'def' --> invalid
What I tried
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
}
I am having issue with this rule:
allow a single quote in middle but it must be escaped by \\
有帮助吗?谢谢!
2 回答
试试这个(“纯”正则表达式形式的可读性;需要在Java字符串中转义):
在字符串内部,我们接受任意数量的字符,这些字符不是
'
或\
,或者恰好是转义序列\'
. 请注意,这将禁止在其他字符前面使用反斜杠,这就是转义字符通常的工作方式 . (我还建议使用*
rater而不是+
以便允许空字符串 . )你需要
见Java demo .
细节:
\s*
- 0个空格'
- 单引号[^'\\]*
- 除了'
和\
之外的0个字符(?:\\.[^'\\]*)*
- 零个或多个序列\\.
- 除了linebreak char之外的任何转义字符(添加Pattern.DOTALL
以匹配任何字符包含换行符)[^'\\]*
- 除了'
和\
之外的0个字符'
- 单引号\s*
- 0个空格