You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用JFlex正则匹配name=或name = 开头的行并提取值

JFlex 行内容提取实现方案

可直接复用以下规则与代码,实现提取行首name=/name = 后内容的需求。

JFlex 规则文件(命名为NameExtractor.jflex)

package com.example;

import java.io.*;

%%
%class NameExtractorLexer
%public
%function yylex
%type Void
%line
%column

%{
  // 输出提取结果,可按需替换为写入集合、文件等逻辑
  private void outputValue(String val) {
    System.out.println(val.trim());
  }
%}

// 正则宏定义
LineTerminator = \r|\n|\r\n
WhiteSpace = [ \t]
NamePrefix = ^"name"{WhiteSpace}*"="{WhiteSpace}*
ValueContent = [^\r\n]+

%%
<YYINITIAL> {
  // 匹配目标行,提取等号后内容
  {NamePrefix}{ValueContent} {
    String fullLine = yytext();
    int equalPos = fullLine.indexOf('=');
    String targetValue = fullLine.substring(equalPos + 1);
    outputValue(targetValue);
  }

  // 跳过无关行内容
  [^\r\n]+ { }

  // 处理换行,保证行首匹配逻辑正常生效
  {LineTerminator} { }
}

配套Java调用代码(命名为Main.java)

package com.example;

import java.io.*;

public class Main {
  public static void main(String[] args) {
    if (args.length != 1) {
      System.err.println("用法: java com.example.Main <待处理文本文件路径>");
      System.exit(1);
    }
    try (Reader reader = new FileReader(args[0])) {
      NameExtractorLexer lexer = new NameExtractorLexer(reader);
      lexer.yylex();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

关键规则说明

  • 行首匹配:JFlex中^元字符默认匹配行起始位置,可确保仅捕获行首的name赋值语句,不会误匹配行中间出现的name=片段
  • 格式兼容:{WhiteSpace}*匹配0到多个空格、制表符,同时兼容name=xxx、name = xxx、name = xxx等多种带不同数量空格的写法
  • 内容提取:匹配到目标行后,通过定位等号位置截取后半段内容,自动去除首尾空白后输出,避免值前后多余空格影响结果,也可兼容值本身包含等号的场景

效果验证

使用提供的测试输入:

bla bla bla
bla bla bla
name=StackOverFlow
name = ThisIsGo
bla bla bla

运行后输出结果为:

StackOverFlow
ThisIsGo

内容的提问来源于stack exchange,提问作者Mobinkh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 19:30:09