Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 查找子字符串_Java_Regex_String - Fatal编程技术网

Java 查找子字符串

Java 查找子字符串,java,regex,string,Java,Regex,String,我有一条像绳子一样的线 Strig foo = "PrinciplexbxbxbxbxbxbTeachershshshshshhsClassdhdhdhhdhdhdList[something to be extracted]jdjdjdj" 我希望输出为“要提取的内容”,其中字符串的正则表达式是Principle*Teacher*Class*List[*]*。 在此之后,创建一个新字符串 Strig foo = "PrinciplexbxbxbxbxbxbTeachershshshshsh

我有一条像绳子一样的线

Strig foo = "PrinciplexbxbxbxbxbxbTeachershshshshshhsClassdhdhdhhdhdhdList[something to be extracted]jdjdjdj"
我希望输出为“要提取的内容”,其中字符串的正则表达式是
Principle*Teacher*Class*List[*]*。

在此之后,创建一个新字符串

 Strig foo = "PrinciplexbxbxbxbxbxbTeachershshshshshhsClassdhdhdhhdhdhdList[something new]jdjdjdj"

如果您的
字符串始终采用相同的格式,并且包含单词
Principle
Teachers
Class
,后跟
[一些文本]
,那么这就是您需要的:

Principle\\w*Teachers\\w*Class\\w*\\[([\\s\\w]+)\\]\\w*
\\[([\\s\\w]+)\\]
中的匹配组将匹配您需要的字符串

您的代码如下所示:

final String regex = "Principle\\w*Teachers\\w*Class\\w*\\[([\\s\\w]+)\\]\\w*";
final String string = "Strig foo = \"PrinciplexbxbxbxbxbxbTeachershshshshshhsClassdhdhdhhdhdhdList[something to be extracted]jdjdjdj\"\n";

string.replaceAll(regex, "something new");

如果您的
字符串始终采用相同的格式,并且包含单词
Principle
Teachers
Class
,后跟
[一些文本]
,那么这就是您需要的:

Principle\\w*Teachers\\w*Class\\w*\\[([\\s\\w]+)\\]\\w*
\\[([\\s\\w]+)\\]
中的匹配组将匹配您需要的字符串

您的代码如下所示:

final String regex = "Principle\\w*Teachers\\w*Class\\w*\\[([\\s\\w]+)\\]\\w*";
final String string = "Strig foo = \"PrinciplexbxbxbxbxbxbTeachershshshshshhsClassdhdhdhhdhdhdList[something to be extracted]jdjdjdj\"\n";

string.replaceAll(regex, "something new");

如果您想获取要提取的
内容
,则可以提取两个括号之间的所有内容
\[(.*)\]
,您可以使用如下模式:

String foo = ...;
String regex = "\\[(.*)\\]";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(foo);

if (matcher.find()) {                                                
    System.out.println(matcher.group(1));
}

如果要替换它,可以将replaceAll与相同的正则表达式一起使用:

foo = foo.replaceAll("\\[.*?\\]", "[something new]");

如果您想获取要提取的
内容
则可以提取两个括号之间的所有内容
\[(.*?)\]
,您可以使用如下模式:

String foo = ...;
String regex = "\\[(.*)\\]";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(foo);

if (matcher.find()) {                                                
    System.out.println(matcher.group(1));
}

如果要替换它,可以将replaceAll与相同的正则表达式一起使用:

foo = foo.replaceAll("\\[.*?\\]", "[something new]");

到底是什么问题?您尝试了什么?您已经提到了regex(尽管您发布的字符串不是合适的regex),那么问题出在哪里呢?
*
在regex中不是通配符;它是一个量词:它应用于前面的标记来描述它可以发生任意次数(包括0)。对于所需的通用通配符
*
,它是任意次数的任意字符。正则表达式:@arminb and all。谢谢你的regex101链接。这将非常有帮助。到底是什么问题?你尝试了什么?您已经提到了regex(尽管您发布的字符串不是合适的regex),那么问题出在哪里呢?
*
在regex中不是通配符;它是一个量词:它应用于前面的标记来描述它可以发生任意次数(包括0)。对于所需的通用通配符
*
,它是任意次数的任意字符。正则表达式:@arminb and all。谢谢你的regex101链接。这将非常有帮助