java - 使用 Java 正则表达式提取包含 URL 的特定行

标签 java arrays json regex conditional-statements

我正在尝试从显示为 JSON 的网页中提取链接列表。我已经使用单独的代码测试了正则表达式,以确保它正常工作,但是我无法让它作为后续条件语句的一部分工作。

如果在条件语句中使用,则以下内容将“true”打印为 boolean 值: System.out.println(Str.matches("\"link\":\"([^\"]+)\","));

public class Main {

    public static void main(String[] args) throws Exception {
        File fout = new File("out.json");
        FileOutputStream fos = new FileOutputStream(fout);


        URL a = new URL("https://www.googleapis.com/customsearch/v1?q=eran+ariel&cx=006156390203515615519%3A-lsrgi-_9-o&key=AIzaSyAeDR4GlES4I2hwAbrifRiF7uUDi12pfaM");
        URLConnection yc = a.openConnection();
        BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));

        String inputLine;
        while ((inputLine = in.readLine()) != null) {
            if (inputLine.matches("\"link\": \"([^\"]+)\",")) {
                System.out.println(inputLine);
                bw.write(inputLine);
            } else
                bw.newLine();
        }
        in.close();
        bw.close();
    }
}

没有得到任何结果。

最佳答案

如果您在使用需要匹配整行的Pattern.Matches()时遇到问题,
使用模式对象 Pattern.matcher() 方法,该方法返回一个 Match 对象,您可以从中
可以使用其 Match.find() 方法来查找子字符串。

您的代码将如下所示

 Pattern p = Pattern.compile("\"link\"r\\s*:\\s*\"([^\"]+)\",");

 while ((inputLine = in.readLine()) != null) {
     Matcher m = p.matcher(inputline);
     if (m.find()) {
         System.out.println(inputLine);
         bw.write(inputLine);
     } else
         bw.newLine();
 }

关于java - 使用 Java 正则表达式提取包含 URL 的特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57749079/

相关文章:

Java - 为什么 jpanel 的大小不起作用

java - 将一个元素压入具有多个堆栈的数组中的堆栈中将元素压入所有堆栈中

javascript - 用 forEach 重写 for 循环

java - 使用 Java 访问 JSONArray 中的项目成员

java - 在字符串模板电子邮件中格式化日期

java - 如何编写代码来通知 XML 文件更改?

java - 更改 Map 的值是原子操作吗?

java - 在java中分割包含使用符号的数学函数

Java - 从字符串获取每天的开始和结束时间

javascript - 如何传递带有斜杠或特殊字符的数组?