java - 在 Android 中使用正则表达式提取更多字符串

标签 java android regex

<分区>

输入是这样的:

String text = "{\"definitions\":[{\"id\":\"com.sample.evaluationa\",\"name\":\"Evaluationa\",\"vers}{\"id\":\"com.sample.evaluationb\",\"name\":\"Evaluationb\",\"vers}";

还有一些引用使其更加透明

String definitions = "{\"definitions\":[";
String id = "{\"id\":\"";
String name = "\",\"name\":\"";
String rest = "\",\"vers}";

我的正则表达式看起来像这样:

Pattern pattern = Pattern.compile((Pattern.quote(definitions)) +"("+ (Pattern.quote(id)) +"(.+)" +(Pattern.quote(name))+"(.+)"+(Pattern.quote(rest))+")*");

我正在寻找 id 的 (com.sample.evaluation)

Matcher regexMatcher = pattern.matcher(text);
    while (regexMatcher.find()) {
        title = regexMatcher.group(2);
        System.out.println(title);
        System.out.println("The pattern is " + pattern.pattern());
    }

我的输出看起来像这样:

com.sample.evaluationa","name":"Evaluationa","vers}{"id":"com.sample.evaluationb
The pattern is \Q{"definitions":[\E(\Q{"id":"\E(.+)\Q","name":"\E(.+)\Q","vers}\E)*

但是我想要:

com.sample.evaluationacom.sample.evluationb

在循环改变目标群体之后,还有什么也很有趣但不是很好的方式

title = regexMatcher.group(2);

我得到了(当然还有图案线)

Evaluationb

最佳答案

.+ 表示 1infinite 个字符,正则表达式引擎默认是 greedy 所以它会匹配尽可能多的字符。

最好定义您可以期望的字符类:
[a-z\.]+ 用于 id[A-Z][a-z]+ 用于 name
这些将自行工作,因为当点击 \ 时,正则表达式引擎将停止,因为 \ 不是最后一类的一部分

如果你出于任何原因想要使用 .+ 但尽早停止添加 ? 之后它会切换到 lazy行为。 (例如 .+?)

关于java - 在 Android 中使用正则表达式提取更多字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15260438/

相关文章:

Java:链表上的冒泡排序无法正常工作

java - 电子邮件回复表明电子邮件打开和收到的时间

java - 将 JPanel 图形导出为 .png 或 .gif 或 .jpg

javascript - JS/JQuery keyup 和 keydown Android 设备上不可预测的行为

javascript - 使用正则表达式验证电子邮件

java - Java 中的命令行查询

android - 无法在 Android 中的 FrameLayout 上检测手势

android - 覆盖布局在 Android O 中崩溃

regex - 理解 bash 脚本中的 grep 模式

java - 如何在 Java 中拆分字符串,忽略多个连续的标记