当前位置: 首页 > 知识库问答 >
问题:

正则表达式返回布尔值而不是字符串[重复]

堵宪
2023-03-14

所以我试着从一行中获取数据,看起来像这样:

GET /something HTTP/1.1 

现在,我这里是我的代码与正则表达式:

 final ServerSocket server = new ServerSocket(8081);
    System.out.println("Listening on port 8081...");
    while (true) {
        final Socket clientSocket = server.accept();

        InputStreamReader isr = new InputStreamReader(clientSocket.getInputStream());
        BufferedReader reader = new BufferedReader(isr);

        String line = reader.readLine();

        Pattern pattern = Pattern.compile("GET \\/(.*?) HTTP");
        Matcher m = pattern.matcher(line);

        System.out.println(m.find());

“/某物”是我需要得到的,在实际使用中它永远是不同的东西。代码总是打印出“true”,而不是字符串中应该有的东西。我做错了什么?

共有3个答案

钱承允
2023-03-14

Matcher类中的查找方法将返回不匹配字符串的布尔值。

你可以看到留档如下:

public boolean find():尝试查找与模式匹配的输入序列的下一个子序列。

您可以使用下面的代码片段来查找所有匹配的模式。

Matcher m = Pattern.compile("GET \\/(.*?) HTTP").matcher(line);

while (m.find()) {
    System.out.println(m.group());
}
聂建茗
2023-03-14

您需要进一步使用groupAPI从正则表达式中获取捕获的集值。


注意:group不从位置0开始。第一个元素只是您的原始输入值。您需要从位置1开始。

例子:

private void doIt3() {
    String line = "GET /something HTTP/1.1 ";
    Pattern pattern = Pattern.compile("GET \\/(.*?) HTTP");
    Matcher m = pattern.matcher(line);

    if (m.find()) {
        System.out.println("Found value => " + m.group(1));
    }
}

输出:

发现价值=

柯耀
2023-03-14

您必须使用Group方法来获得数学值。

find only告诉您字符串是否匹配:

Pattern pattern = Pattern.compile("GET \\/(.*?) HTTP");
Matcher m = pattern.matcher(line);
if (m.find())
    System.out.println(m.group(0));
 类似资料:
  • 问题内容: 假设您要在管道上执行正则表达式搜索并提取,但是该模式可能会跨越多行,该怎么做?也许正则表达式库适用于流? 我希望使用Python库完成这项工作吗?但是任何解决方案都可以,当然不是库,而是cmd行工具。 顺便说一句,我知道如何解决我当前的问题,只是寻求一个通用的解决方案。 如果不存在此类库,那么在常规数学算法永远不需要向后扫描的情况下,为什么常规库不能与流一起使用。 问题答案: 如果您寻

  • 问题内容: 我如何布尔计算包含布尔表达式的字符串?喜欢: 用户应该能够定义自己的变量(),并定义自己的布尔表达式()。因此,我将所有表达式仅作为字符串使用。我如何评估它们? 问题答案: 您可以使用Nambari评论的ScriptEngine: 打印0。 还要注意,该表达式不是布尔表达式,而是按位运算。

  • 问题内容: 我在用Python将字符串中的数字匹配时遇到麻烦。尽管应该明确匹配,但甚至不匹配 或仅匹配。我的监督在哪里? 问题答案: 阅读文档:http : //docs.python.org/2/library/re.html#re.match 如果在零个或多个字符 开头 的 字符串 您要使用(或)

  • 我有一个包含数千行的文本文件。这里有一个例子 我试图提取'nt60'、'nt50'末尾的字符串。 问题是会包含行尾字符() 我想使用正则表达式搜索来匹配从 (') 开始的字符串,但我不知道我应该用什么来匹配 。 有人能帮忙吗?

  • 关于正则表达式有很多类似的问题,但我仍然对以下情况感到困惑:

  • 问题内容: 我想获得正则表达式的第一场比赛。 在这种情况下,我得到了一个列表: [‘33’,‘44’] 我可以提取列表的第一个元素: ‘33’ 但这仅在至少有一个匹配项的情况下有效,否则我将收到错误消息: IndexError:列表索引超出范围 在这种情况下,我可以定义一个函数: 是否有一种无需定义新功能即可获得该结果的方法? 问题答案: 您可以通过添加默认值到您的正则表达式中: 也可以与其他人指