所以我试着从一行中获取数据,看起来像这样:
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”,而不是字符串中应该有的东西。我做错了什么?
Matcher
类中的查找方法将返回不匹配字符串的布尔值。
你可以看到留档如下:
public boolean find():尝试查找与模式匹配的输入序列的下一个子序列。
您可以使用下面的代码片段来查找所有匹配的模式。
Matcher m = Pattern.compile("GET \\/(.*?) HTTP").matcher(line);
while (m.find()) {
System.out.println(m.group());
}
您需要进一步使用group
API从正则表达式中获取捕获的集值。
注意: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));
}
}
输出:
发现价值=
您必须使用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:列表索引超出范围 在这种情况下,我可以定义一个函数: 是否有一种无需定义新功能即可获得该结果的方法? 问题答案: 您可以通过添加默认值到您的正则表达式中: 也可以与其他人指