Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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_Repeat - Fatal编程技术网

带条件的Java重复字符正则表达式

带条件的Java重复字符正则表达式,java,regex,repeat,Java,Regex,Repeat,我有很大的数据库。我想检查我的数据库大写错误。我使用这种模式重复字符。模式工作,但我需要用字符串开始和结束条件 模式: 目标字符串: 结果:aaa 我想给regex添加条件;以Ja开头,以*结尾。结果**只能是重复的字符 如果可能的话,我不想通过编程控制regex 我要用String.replaceAllregex执行此操作,String not to 模式或匹配器类 您可以使用锚定在前导词边界处的先行词: \b(?=Ja\w*a\b)\w*?((\w)\2+)\w*\b 见 详情: \b-前

我有很大的数据库。我想检查我的数据库大写错误。我使用这种模式重复字符。模式工作,但我需要用字符串开始和结束条件

模式:

目标字符串:

结果:aaa

我想给regex添加条件;以Ja开头,以*结尾。结果**只能是重复的字符

如果可能的话,我不想通过编程控制regex

我要用String.replaceAllregex执行此操作,String not to 模式或匹配器类


您可以使用锚定在前导词边界处的先行词:

\b(?=Ja\w*a\b)\w*?((\w)\2+)\w*\b

详情:

\b-前导词边界 ?=Ja\w*a\b-一种正向前瞻,要求整个单词以Ja开头,然后可以有0多个单词字符,以a结尾 \w*?-0+个字字符,但尽可能少 \w\2+-第1组匹配相同的连续字符 \w*-任何剩余的单词字符0或更多 \b-尾随词边界。 您正在寻找的结果在第1组中

String s = "Prooo\nJavaaa";
Pattern pattern = Pattern.compile("\\b(?=Ja\\w*a\\b)\\w*?((\\w)\\2+)\\w*\\b");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
    System.out.println(matcher.group(1)); 
} 

请参阅。

另一个代码示例,该示例根据您预期的输入和输出格式从@Wiktor Stribizew的代码中获得灵感

public static void main( String[] args )
{
    String[] input =
        { "Javaaa", "Javaaaaaaaaa", "Javaaaaaaaaaaaaaaaaaa", "Paoooo", "Paoooooooo", "Paooooooooxxxxxxxxx" };
    for ( String str : input )
    {

        System.out.println( "Target String :" + str );
        Pattern pattern = Pattern.compile( "((.)\\2+)" );
        Matcher matcher = pattern.matcher( str );
        while ( matcher.find() )
        {
            System.out.println( "result: " + matcher.group() );
        }
        System.out.println( "---------------------" );
    }
    System.out.println( "Finish" );
}
输出:


你是说这个\\bJa\\w*\\w\\1+\\w*a\\b此正则表达式结果选择全部。这有条件,但结果必须是aaa,如果目标字符串Prooo和regex\\bPro\\w*\\w\\1+\\w*o\\b,则结果必须是ooo。您的正则表达式结果单词all捕获重复部分,\\bJa\\w*\\w\\2+\\w*a\\bI不需要它,因为我有一个大的大写列表,有许多正则表达式,我使用String.replaceAllregex,String方法。例如,在我的列表中:[{1,}[.]{1,}[]{1,}。是拆分器。我不想要它,因为我有一个大的大写列表,有很多正则表达式,我使用String.replaceAllregex,String方法。例如,在我的列表中:[{1,}[.]{1,}[]{1,}。是斯普利特。那有什么问题?替换为1美元。字符串是独立的吗?如果是,只需使用^而不是前导单词边界,使用$而不是后继单词边界。看,是的。比如我想要这个;在单词Javaaa中,如果单词Prooo位于regex-Pro之后,则在regex-Java之后。如果这个词没有任何意义。我只想让你通过String.replaceAllregex,String方法来制作我设置的单词。太棒了,谢谢。最后String s=Javaaa String.replaceAll方法的结果是:Java和您的正则表达式可以吗?我不确定您需要什么。请告知已知的变量。
String s = "Prooo\nJavaaa";
Pattern pattern = Pattern.compile("\\b(?=Ja\\w*a\\b)\\w*?((\\w)\\2+)\\w*\\b");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
    System.out.println(matcher.group(1)); 
} 
public static void main( String[] args )
{
    String[] input =
        { "Javaaa", "Javaaaaaaaaa", "Javaaaaaaaaaaaaaaaaaa", "Paoooo", "Paoooooooo", "Paooooooooxxxxxxxxx" };
    for ( String str : input )
    {

        System.out.println( "Target String :" + str );
        Pattern pattern = Pattern.compile( "((.)\\2+)" );
        Matcher matcher = pattern.matcher( str );
        while ( matcher.find() )
        {
            System.out.println( "result: " + matcher.group() );
        }
        System.out.println( "---------------------" );
    }
    System.out.println( "Finish" );
}
Target String :Javaaa
result: aaa
---------------------
Target String :Javaaaaaaaaa
result: aaaaaaaaa
---------------------
Target String :Javaaaaaaaaaaaaaaaaaa
result: aaaaaaaaaaaaaaaaaa
---------------------
Target String :Paoooo
result: oooo
---------------------
Target String :Paoooooooo
result: oooooooo
---------------------
Target String :Paooooooooxxxxxxxxx
result: oooooooo
result: xxxxxxxxx
---------------------
Finish