gpt4 book ai didi

java - 正则表达式搜索字符串?

转载 作者:行者123 更新时间:2023-12-02 06:16:00 25 4
gpt4 key购买 nike

我需要能够创建一个正则表达式来搜索 Java 中的任何字符串并匹配该特定表达式。

注册匹配: ./ADD NAME= <--- 我需要在读入文件的任何字符串中匹配此正则表达式,它通常位于位置 1 到 13

我正在任何字符串的前 10 个字符中查找此内容,因为我必须返回等号后面的名称来创建文件名,因此整行将如下所示。

问题:为什么我的表达式在任何字符串中都不匹配?

文件行:

   ./ ADD NAME=FILE02 
...more records would go here...
./ ADD NAME=FILE332
...more records would go here...
./ ADD NAME=FILE3
...more records would go here...
./ ADD NAME=FILE-1A
...more records would go here...

代码:

    private void locatedFileName(String s) {
Pattern p = Pattern.compile("./ ADD name=");
Matcher m = p.matcher(s);
boolean b = m.matches();

if (b) {
System.out.println("True");
} else {
System.out.println("False");
}
}

**private void locatedFileName(String s) {
if (s.matches("./ ADD name=")) {
System.out.println("True");
} else {
System.out.println("False");
}
}**

所有代码:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;


public class test {

test(){
}

private void locatedFileName(String s) {
if (s.matches("./ ADD name=")) {
System.out.println("True");
} else {
System.out.println("False");
}
}

private void testReadTextFile() {
try {
BufferedReader reader = new BufferedReader(new FileReader("C:\\Users\\itpr13266\\Desktop\\TestFile.txt"));
String line = null;
//Will read through the file until EOF
while ((line = reader.readLine()) != null) {
System.out.println(line);
locatedFileName(line); //test to see if the "./ Add name=" is found in any of the strings
}
} catch (IOException e) {
System.out.println("Try-Catch Message - " + e.getMessage());
e.printStackTrace();
}
}

public static void main(String[] a) {
test t = new test();
t.testReadTextFile();
}
}

我尝试过的最新代码:

代码:

        final String REGEX = ("(?i)\\./\\s+ADD\\s+NAME\\s*=");
final String REGEXtemp = ("\\s+ADD\\s");

//Pattern p = Pattern.compile(REGEX);
Pattern p = Pattern.compile(REGEXtemp);
Matcher m = p.matcher(s);
boolean b = m.matches();

if (b) {
System.out.println("True");
} else {
System.out.println("Reg not found in string!");
}

最佳答案

信息 -
尝试这样获取子字符串:

 Pattern patt = Pattern.compile("(?i)\\./\\s+ADD\\s+name\\s*=");
Matcher m = patt.matcher( s );
while (m.find())
// or if (m.find())
{

}

我认为匹配必须匹配整个字符串(陷阱)
来匹配整个事情。为此,请使用此正则表达式:

 Pattern.compile("(?si).*?\\./\\s+ADD\\s+name\\s*=.*");
<小时/>

您的正则表达式应该匹配,即使与您使用的点元字符也是如此。
那里可能有制表符而不是空格。

我想你可以用空白类替换空格文字。
像这样的事情:
编辑 - 哦,你也需要不区分大小写
因为 ADD,name 与 ADD,NAME 不匹配

 #  Pattern.compile("(?i)\\./\\s+ADD\\s+name\\s*=");

(?i) \./ \s+ ADD \s+ name \s* =

带有注释的扩展正则表达式

 #  Pattern.compile("(?i)\\./\\s+ADD\\s+name\\s*=");

(?i) # Case insensitive modifier
# for all subsequent alpha literals
\. # literal dot
/ # literal forward slash
\s+ # 1 or more whitespace characters
ADD # 'ADD'
\s+ # 1 or more whitespace characters
name # 'name'
\s* # 0 or more whitespace characters
= # '='

关于java - 正则表达式搜索字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21463443/

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