Tag: 模式匹配

Java中的调试模式(正则表达式)失败(Android)

我在一段代码中进行模式匹配,在一种情况下可以正常工作但不能在另一种情况下工作。 该代码目前是: DLVRYrx = Pattern.compile(“(\\d+\\s\\p{Letter}+\\s\\d+)\\s(\\d+(?:\\.\\d+)?)\\s(\\d+)”); Log.d(TAG, “* Regex matched ” + DLVRYrx.matcher(“01 Jan 01 60.9876 1234″).groupCount() + ” groups”); // prints 3 as expected in logcat for (int i=19; i<(fields-6); i++) { final String DATAstr = values[i]; try { Matcher Dmatch = DLVRYrx.matcher(DATAstr); String data1 = Dmatch.group(0); } catch (IllegalStateException e) { Log.e(TAG, "! Text […]

捕获未跟随某些数字的数字流

我想捕获一些未跟随某些数字的数字流。 例如 input = abcdef lookbehind 123456….. asjdnasdh lookbehind 789432 我想使用负向前瞻捕获789432而不是123。 我试过(?<=lookbehind )([\d])+(?!456)但它捕获了123456和789432 。 使用(?<=lookbehind )([\d])+?(?!456)仅捕获1和7 。 分组不是我的选择,因为我的用例不允许我这样做。 有什么方法可以使用纯正则表达式捕获789432而不是123吗? 对答案的解释表示赞赏。

Java模式/匹配器

这是一个示例文本: \1f\1e\1d\020028 。 我无法修改输入文本,我正在从文件中读取长串文本。 我想提取以下内容: \1f , \1e , \1d , \02 为此,我写了以下正则表达式模式: “\\[a-fA-F0-9]” 我正在使用Pattern和Matcher类,但我的匹配器无法使用提到的正则表达式找到模式。 我已经使用一些在线正则表达式网站上的文本测试了这个正则表达式,并且令人惊讶的是它在那里工作。 我哪里错了? 原始代码: public static void main(String[] args) { String inputText = “\1f\1e\1d\02002868BF03030000000000000000S023\1f\1e\1d\03\0d”; inputText = inputText.replace(“\\”, “\\\\”); String regex = “\\\\[a-fA-F0-9]{2}”; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(inputText); while (m.find()) { System.out.println(m.group()); } } 输出 :没有打印

如何使用扫描仪和模式类匹配文本中的模式?

我想查找我的文本文件中是否存在特定模式。 即时通讯使用以下类: java.util.regex.Pattern and java.util.Scanner; 我的示例文本行是 String Line=”DBREF 1A1F A 102 190 UNP P08046 EGR1_MOUSE 308 396″; 而且,我想匹配以下类型的模式: A 102 190 其中,在A的位置az或AZ但是单个包机。 在102的位置任何整数和任何长度。 在190的位置任何整数和任何长度。 而且,我的模式匹配代码是: Scanner sr=new Scanner(Line); Pattern p = Pattern.compile(“\\s+([a-zA-Z]){1}\\s+\\d{1,}\\s+\\d{1,}\\s+”); while(sr.hasNext(p)) { System.out.println(“Pattern exists”); System.out.println(“Matched String : “+sr.next(p)); } 但是,即使它存在,模式也不匹配.. 我认为问题在于我的模式字符串: \\s+([a-zA-Z]){1}\\s+\\d{1,}\\s+\\d{1,}\\s+” 任何人,Plz帮助我应该使用什么模式字符串????

通过正则表达式获得多个匹配

我想使用REGEX通过Matcher&Pattern从全局字符串中检索字符串。 String str = “ABC123DEF” Pattern pattern = Pattern.compile(“(.*)”); Matcher matcher = pattern.matcher(str); 我的问题是匹配器只给我一个匹配全局标签强大的匹配: ABC123DEF 我的目标是获得2场比赛: ABC DEF 谢谢你非常适合你的帮助。

如何知道给定字符串是否是Java中另一个字符串的子字符串

嗨,我必须计算一个给定的字符串是否是一个更大的字符串的子字符串。 例如 String str = “Hallo my world”; String substr = “my” 方法“contains”应返回true,因为str包含substr(否则为false)。 我在String类中寻找类似“contains”的东西,但我找不到它。 我想唯一的解决方案是使用模式匹配。 如果是这种情况会更好(最便宜)的方式吗? 谢谢!

如何使用Java Regex查找字符串中的所有重复字符序列?

使用Java和Regex解析随机字符串以查找重复序列。 考虑字符串: aaabbaaacccbb 我想找到一个正则表达式,它将在上面的字符串中找到所有匹配项: aaabbaaacccbb ^^^ ^^^ aaabbaaacccbb ^^ ^^ 什么是正则表达式,它将检查字符串是否有任何重复的字符序列,并返回那些重复字符的组,使得组1 = aaa和组2 = bb。 另请注意,我使用了一个示例字符串,但任何重复的字符都是有效的:RonRonJoeJoe …… … ,, … ,,

“静态”模式不应该是静态的吗?

我刚刚发现了一些我没写过的代码中的错误,我有点惊讶: Pattern pattern = Pattern.compile(“\\d{1,2}.\\d{1,2}.\\d{4}”); Matcher matcher = pattern.matcher(s); 尽管这个代码在我们得到的输入数据上严重失败(因为它试图找到17.01.2011格式的日期并找回10396/2011之类的东西然后崩溃,因为它无法解析日期但是真的很难 ‘这个问题的重点;)我想知道: Pattern.compile不是速度优化的重点之一(通过预编译正则表达式)? 不应该将所有“静态”模式总是编译成静态模式吗? 在网络上有很多例子,使用Pattern.compile总是重新编译相同的模式,我开始怀疑我是否看到了东西。 不是(假设字符串是静态的,因此不是动态构造的): static Pattern pattern = Pattern.compile(“\\d{1,2}.\\d{1,2}.\\d{4}”); 总是优先于非静态模式参考?

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

有没有办法只获得独特的比赛? 在匹配后不使用列表或映射,我希望匹配器输出立即是唯一的。 样本输入/输出: 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]

使用scala模式匹配而不是java switch case有什么好处?

每个人都说模式匹配是函数式语言的一个很好的特性。 为什么? 我不能简单地使用ifs和切换案例的一切吗? 我想了解使用模式匹配而不是常规过程编程ifs和switch case的优点