gpt4 book ai didi

java - Java中使用RegEx提取括号内的参数

转载 作者:行者123 更新时间:2023-11-30 09:31:54 25 4
gpt4 key购买 nike

我正在编写一个实用程序来从 JSP 中提取头文件的名称。我可以毫无问题地逐行阅读 JSP 并找到我需要的行。我在使用正则表达式提取所需的特定文本时遇到问题。在查看了许多类似的问题后,我碰壁了。

我将从内部匹配的字符串示例是:

<jsp:include page="<%=Pages.getString(\"MY_HEADER\")%>" flush="true"></jsp:include>

对于这个例子,我只需要 MY_HEADER。任何时候我有这个标签:

<%=Pages.getString

我需要介于两者之间的东西:

<%=Pages.getString(\"  and this: )%>

这是我目前拥有的(它不起作用,我可能会补充):

String currentLine;
while ((currentLine = fileReader.readLine()) != null)
{
Pattern pattern = Pattern.compile("<%=Pages\\.getString\\(\\\\\"([^\\\\]*)");
Matcher matcher = pattern.matcher(currentLine);
while(matcher.find()) {
System.out.println(matcher.group(1).toString());
}}

我需要能够使用 Java RegEx API 和正则表达式来提取这些 header 名称。

非常感谢有关此问题的任何帮助。谢谢!

编辑:

谢天谢地,解决了这个问题。棘手的部分是,在获得正确的正则表达式后,必须考虑到我提供给正则表达式的字符串总是将有两个“/”字符((/“MY_HEADER "/) ) 需要在模式中转义。

这是有效的方法(感谢帮助 ;-)):

Pattern pattern = Pattern.compile("<%=Pages\\.getString\\(\\\\\"([^\\\\\"]*)"); 

最佳答案

这应该可以解决问题:

<%=Pages\\.getString\\(\\\\\"([^\\\\]*)

是的,这是一个可怕的反斜杠数量。 matcher.group(1)应该返回 MY_HEADER。它从 \" 开始并匹配下一个 \ 之前的所有内容(我假设这里是 \")%>。)

当然,如果您的目标文本包含反斜杠 ( \ ),这将不起作用。但是你没有表示你会寻找类似 <%=Pages.getString(\"Fun!\Yay!\")%> 的东西-- 这个正则表达式只会返回 Fun!忽略其余部分。

编辑

你的测试用例失败的原因是因为你使用了这个测试字符串:

String currentLine = "<%=Pages.getString(\"MY_HEADER\")%>"; 

这相当于从文件中读取它并查看:

<%=Pages.getString("MY_HEADER")%> 

请注意缺少任何 \ .您需要改用它:

String sCurrentLine = "<%=Pages.getString(\\\"MY_HEADER\\\")%>"; 

这相当于您想要的。

这是有效的测试代码:

String currentLine = "<%=Pages.getString(\\\"MY_HEADER\\\")%>"; 
Pattern pattern = Pattern.compile("<%=Pages\\.getString\\(\\\\\"([^\\\\]*)");
Matcher matcher = pattern.matcher(currentLine);
while(matcher.find()) {
System.out.println(matcher.group(1).toString());
}

关于java - Java中使用RegEx提取括号内的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12734814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com