Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式来计算字符串中的单引号数,不包括两个连续的双引号_Java_Regex_String - Fatal编程技术网

Java 正则表达式来计算字符串中的单引号数,不包括两个连续的双引号

Java 正则表达式来计算字符串中的单引号数,不包括两个连续的双引号,java,regex,string,Java,Regex,String,我需要计算一个单引号在字符串中出现的次数,但不包括单引号后面紧跟单引号的情况 例如: 'singlequote','another single quote' int count2 = string.replaceAll("''|[^']", "").length(); 应该给计数4和 'singlequote','2 quote'' inside single quote' 也应该给计数4 是我干的 char quote= '\''; int count2 = string.repl

我需要计算一个单引号在字符串中出现的次数,但不包括单引号后面紧跟单引号的情况

例如:

'singlequote','another single quote' 
int count2 = string.replaceAll("''|[^']", "").length();
应该给计数4和

'singlequote','2 quote'' inside single quote' 
也应该给计数4

是我干的

char quote= '\'';
int count2 = string.replaceAll("[^"+ quote +"]", "").length();
但这是所有发生的事情


有没有一种方法可以在正则表达式中实现,或者我需要循环遍历所有字符。有人能帮你吗?

你可以使用这个基于查找的正则表达式来匹配不在任何单引号前面或后面的单引号。请注意,它将跳过多个引号的所有情况,因此双引号或三引号将不匹配

(?<!')'(?!')
(?-如果前一个字符不是单引号,则断言
  • -匹配单个引号
  • (?!)
    -如果下一个字符不是单引号,则断言

  • 您可以使用此基于查找的正则表达式来匹配不在任何单引号之前或之后的单引号。请注意,它将跳过多引号的所有情况,因此双引号或三引号将不匹配

    (?<!')'(?!')
    
    (?-如果前一个字符不是单引号,则断言
    
  • -匹配单个引号
  • (?!)
    -如果下一个字符不是单引号,则断言
  • 您可以替换字符串中的所有
    '.[^']
    。它将替换所有2个单引号以及除单引号以外的所有内容

    例如:

    'singlequote','another single quote' 
    
    int count2 = string.replaceAll("''|[^']", "").length();
    
    给出输出
    4

    请参见演示:

    您可以替换字符串中的所有
    '.[^']
    。它将替换所有2个单引号以及除单引号以外的所有内容

    例如:

    'singlequote','another single quote' 
    
    int count2 = string.replaceAll("''|[^']", "").length();
    
    给出输出
    4


    请参阅演示:

    这里有另一种方法,用空字符串替换所有两个连续的引号,并计算出现次数:

    StringUtils.countOccurrencesOf(yourString.replaceAll("''", ""), "'")
    
    确保导入:

    import org.springframework.util.StringUtils;
    

    另一种方法是,用空字符串替换所有两个连续的引号,并计算出现次数:

    StringUtils.countOccurrencesOf(yourString.replaceAll("''", ""), "'")
    
    确保导入:

    import org.springframework.util.StringUtils;
    

    如何处理三重引号或四重引号?是否可以有转义单引号以及
    \'
    ?这基本上必须应用于DB2查询,有“用于转义单引号,因此如果我需要在列中更新Kevin O'Brian,我必须将其作为“Kevin O”“Brian”传递。字母O后面的引号需要被传递Order。如何处理三重或四重引号?是否可以有转义单引号以及
    \'
    ?这基本上必须应用于DB2查询,有“用于转义单引号,因此如果我需要在列中更新Kevin O'Brian,我必须将其作为“Kevin O”“Brian”传递。字母O后面的引号是需要传递给b的引号e忽略。
    (?为什么不?它将只匹配两边都没有被另一个单引号包围的引号。因为首字母和尾随字母
    将不匹配。是的,这是对的,我理解OP不想匹配它们。根据我的理解,OP示例字符串中的计数必须是4,而不是在您的示例中,因为您有3个连续引号s在最后。
    (?为什么不?它将只匹配两边都没有被另一个单引号包围的引号。因为首字母和尾随字母
    将不匹配。是的,这是对的,我理解OP不想匹配它们。根据我的理解,OP示例字符串中的计数必须是4,而不是在您的示例中,因为您有3个连续引号最后是。这并不能解决我的目的,因为它会删除所有的事件,我只需要忽略那些在一对单引号之间出现的事件。所以“David”、“Kevin O”、“Brian”应该给我6而不是4毫米的结果,我不确定我当时是否理解正确。我看到2对单引号(总共8个单引号)在你的例子中:'David','','Kevin O''Brian'这并不能解决我的问题,因为它会删除所有的事件,我只需要忽略那些出现在一对单引号之间的事件。所以'David','','Kevin O''Brian'应该给我6而不是4毫米的结果,我不确定我当时是否理解正确。我看到了两对单引号(共8个单引号)在您的示例中:“David”、“Kevin O”Brian