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