我想写一个正则表达式来验证单引号是否在另一个单引号之前。
有效字符串:
azerty''uiop
aze''rty''uiop
''azertyuiop
azerty''uiop''
azerty ''uiop''
azerty''''uiop
azerty''''uiop''''
无效的字符串:
azerty'uiop
aze'rty'uiop
'azertyuiop
azerty'uiop'
azerty 'uiop'
azerty'''uiop
答案 0 :(得分:5)
可以在一行中完成:
inputString.matches("(?:[^']|'')*+");
正则表达式只是意味着,字符串可以包含0或更多
[^']
''
我使用了0或更多量词(*+
)的所有格版本(*
)。由于解释占有量词的含义会很长,我会引用你here来了解它。简而言之,这是一种优化。
答案 1 :(得分:1)
不需要正则表达式,只需使用.replace()
替换所有两个单引号的序列,然后测试你是否仍然找到单引号;如果是,则该字符串无效:
if (input.replace("''", "").indexOf('\'') != -1)
// Not valid!
如果您还想考虑没有单引号的字符串是有效的,您必须创建一个临时变量:
public boolean isValid(final String input)
{
final String s = input.replace("''", "");
return s.equals(input) ? true : s.indexOf('\'') == -1;
}
答案 2 :(得分:0)
您想要一个非常快速的解决方案吗?尝试下一个:
public static boolean isValid(String str) {
char[] chars = str.toCharArray();
int found = 0;
for (int i = 0; i < chars.length; i++) {
char c = chars[i];
if (c == '\'') {
found++;
} else {
if (found > 0 && found % 2 != 0) {
return false;
}
found = 0;
}
}
if (found > 0 && found % 2 != 0) {
return false;
}
return true;
}
答案 3 :(得分:0)
您也可以使用以下代码:
str.matches("([^\']*(\'){2}[^\']*)+");
对于初学者来说,我认为"([^\']*(\'){2}[^\']*)+"
很容易掌握。但这不是最好的方法。在长时间输入时,它会死亡(遇到回溯地狱)。