正则表达式检查单引号是否在另一个单引号之前

时间:2013-06-12 14:39:28

标签: java regex

我想写一个正则表达式来验证单引号是否在另一个单引号之前。

有效字符串:

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

4 个答案:

答案 0 :(得分:5)

可以在一行中完成:

inputString.matches("(?:[^']|'')*+");

正则表达式只是意味着,字符串可以包含0或更多

  • 非引用字符[^']
    OR
  • 一对连续引号''

我使用了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}[^\']*)+"很容易掌握。但这不是最好的方法。在长时间输入时,它会死亡(遇到回溯地狱)。