Tag: 匹配器

正则表达式Java单词上下文

我想要实现的是我想要获得首字母缩略词的上下文。 你能用正则表达式帮助我吗? 我循环遍历文本(String)并寻找点,匹配后我试图获取特定的首字母缩略词的上下文,以便我可以在那之后做一些其他处理,但我无法得到上下文。 我需要至少5个单词,并在首字母缩略词后5个单词。 //Pattern to match each word ending with dot Pattern pattern = Pattern.compile(“(\\w+)\\b([.])”); Matcher matchDot = pattern.matcher(textToCorrect); while (matchDot.find()) { System.out.println(“zkratka —“+matchDot.group()+” —“); //5 words before and after tha match = context // Matcher matchContext = Pattern.compile(“(.{25})(“+matchDot.group()+”)(.{25})”).matcher(textToCorrect); Pattern patternContext = Pattern.compile(“(?:[a-zA-Z’-]+[^a-zA-Z’-]+){0,10}”+matchDot.group()+”(?:[^a-zA-Z’-]+[a-zA-Z’-]+){0,10}”); Matcher matchContext = patternContext.matcher(textToCorrect); if (matchContext.find()) { System.out.println(“context: “+matchContext.group()+” :”); // […]

Java – 全名的正则表达式

如何validation正则表达式的全名? 我只想要字母表(没有数字),只需要正则表达式的空格。 这是我到目前为止所做的。 你能帮我修一下这个正则表达式吗? 非常感谢你 public static boolean isFullname(String str) { boolean isValid = false; String expression = “^[a-zA-Z][ ]*$”; //I know this one is wrong for sure >,< CharSequence inputStr = str; Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(inputStr); if (matcher.matches()) { isValid = true; } return isValid; }

如何在Matcher组上追加替换而不是整个模式?

我正在使用while(matcher.find())循环遍历Pattern的所有匹配项。 对于它找到的那个模式的每个实例或匹配,我想用一些新文本替换matcher.group(3) 。 这个文本对于每个文本都是不同的,所以我使用matcher.appendReplacement()来重建原始字符串,并使用新的更改。 但是, appendReplacement()替换整个Pattern,而不仅仅是组。 我该怎么做但只修改匹配的第三组而不是整个模式? 这是一些示例代码: Pattern pattern = Pattern.compile(“THE (REGEX) (EXPRESSION) (WITH MULTIPLE) GROUPS”); Matcher matcher = pattern.matcher(“THE TEXT TO SEARCH AND MODIFY”); StringBuffer buffer = new StringBuffer(); while(matcher.find()){ matcher.appendReplacement(buffer, processTheGroup(matcher.group(3)); } 但我想做这样的事情(显然这不起作用)。 … while(matcher.find()){ matcher.group(3).appendReplacement(buffer, processTheGroup(matcher.group(3)); } 像这样的东西,它只取代某个组,而不是整个模式。 编辑:更改正则表达式示例以显示并非所有模式都已分组。

正则表达式 – 贪心量词

我真的在努力解决这个问题: import java.util.regex.*; class Regex2 { public static void main(String[] args) { Pattern p = Pattern.compile(args[0]); Matcher m = p.matcher(args[1]); boolean b = false; while(b = m.find()) { System.out.print(m.start() + m.group()); } } } 使用以下命令运行上述程序时: java Regex2 “\d*” ab34ef 它输出01234456 。 我真的不明白这个输出。 考虑每个字符的以下索引: ab 3 4 ef ^ ^ ^ ^ ^ ^ 0 1 […]

匹配器找不到重叠的单词?

我正在尝试取一个字符串: String s = “This is a String!”; 并返回该字符串中的所有双字对。 即: {“this is”, “is a”, “a String”} 但是现在,我能做的就是返回: {“this is”, “a String”} 如何定义我的while循环,以便我可以解释这个重叠单词的缺失? 我的代码如下:(真的,我很高兴它只返回一个int,表示它找到了多少个字符串子集……) int count = 0; while(matcher.find()) { count += 1; } 谢谢大家。

使用matcher()匹配字符串中的小数

我对匹配器有疑问。 目前我正在尝试读取一个字符串并将所有数字存储到一个数组中。 我的问题是,你如何尝试匹配整数和小数? 我有一系列双打叫: double [] thisArray = new double [20]; 在这个数组中,我试图存储我从字符串中提取的所有数字。 Matcher temp = Pattern.compile(“(\ d +)”)。matcher(x); 这是我对匹配器的function。 但这只匹配整数。 我想匹配整数和小数,如(5.2)。 但是我该怎么做? 我希望能够将整数和小数输入到我的字符串中。 任何帮助,将不胜感激。 谢谢!

Java递归(?)重复(?)深(?)模式匹配

我正在尝试获取输入字符串中与给定模式匹配的所有子字符串。 例如, 给定字符串:aaxxbbaxb 模式:a [az] {0,3} b (我实际想要表达的是:所有以a开头并以b结尾的模式,但在它们之间最多可以包含2个字母) 我想要的确切结果(带有索引): aaxxb:索引0~4 axxb:指数1~4 axxbb:指数1~5 axb:指数6~8 但是当我使用Pattern.compile()和Matcher.find()运行Pattern和Matcher类时,它只给了我: aaxxb:索引0~4 axb:指数6~8 这是我用过的一段代码。 Pattern pattern = Pattern.compile(“a[az]{0,3}b”, Pattern.CASE_INSENSITIVE); Matcher match = pattern.matcher(“aaxxbbaxb”); while (match.find()) { System.out.println(match.group()); } 如何检索与模式匹配的每一个字符串 ? 当然,它不必使用Pattern和Matcher类,只要它有效:)

当在模式中找到模式时,发现Java正则表达式抛出exception没有匹配

我很想弄清楚为什么正则表达式不匹配。 任何帮助深表感谢。 我将逐行浏览网页(工作正常),但我需要为每一行提取链接。 应用程序将检查该行中是否有链接,但我需要实际提取URL。 救命? Pattern p = Pattern.compile(“^.*href=\”([^\”]*)”); Matcher m = p.matcher(result); String urlStr = m.group(); links.add(urlStr); 我一直得到的错误信息是这样的: Exception in thread “main” java.lang.IllegalStateException: No match found at java.util.regex.Matcher.group(Matcher.java:485) 即使’result’中有一个链接引用(hxxp://www.yahoo.com)。 links是一个ArrayList fyi。 提前致谢!

获得唯一的正则表达式匹配结果(不使用地图或列表)

有没有办法只获得独特的比赛? 在匹配后不使用列表或映射,我希望匹配器输出立即是唯一的。 样本输入/输出: String input = “This is a question from [userName] about finding unique regex matches for [inputString] without using any lists or maps. -[userName].”; Pattern pattern = Pattern.compile(“\\[[^\\[\\]]*\\]”); Matcher matcher = pattern.matcher(rawText); while (matcher.find()) { String tokenName = matcher.group(0); System.out.println(tokenName); } 这将输出以下内容: [userName] [inputString] [userName] 但我希望它输出以下内容: [userName] [inputString]

用于匹配开始/结束标记的Java正则表达式会导致堆栈溢出

Java Pattern类的标准实现使用递归来实现许多forms的正则表达式(例如,某些运算符,交替)。 这种方法导致堆栈溢出问题,输入字符串超过(相对较小)长度,甚至可能不超过1,000个字符,具体取决于所涉及的正则表达式。 一个典型的例子是以下正则表达式,使用交替从周围的XML字符串中提取可能的多行元素(名为Data ),该字符串已经提供: (?(?:.|\r|\n)+?) 上面的正则表达式与Matcher.find()方法一起用于读取“数据”捕获组并按预期工作,直到提供的输入字符串的长度超过1,200个字符左右,在这种情况下,它会导致堆栈溢出。 是否可以重写上述正则表达式以避免堆栈溢出问题?