Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.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 - Fatal编程技术网

Java 从两个字符串之间提取复杂字符串

Java 从两个字符串之间提取复杂字符串,java,regex,Java,Regex,我有一个字符串,其中包含以下子字符串: [Qual:3][Text:PIX 1252471471953/YHYF/PPP121.40/10RTY10/NOLXX08X1][Elem:123] 我想提取[文本:和]之间的部分,即PIX 1252471471953/YHYF/PPP121.40/10RTY10/NOLXX08X1 如何执行此操作?使用以下字符串作为正则表达式: "\\[Text:(.*?)\\]" 第一个捕获组将为您提供所需的子字符串 非贪婪匹配(*?)需要使其在第一个]处停止,而

我有一个字符串,其中包含以下子字符串:

[Qual:3][Text:PIX 1252471471953/YHYF/PPP121.40/10RTY10/NOLXX08X1][Elem:123]

我想提取
[文本:
]
之间的部分,即
PIX 1252471471953/YHYF/PPP121.40/10RTY10/NOLXX08X1


如何执行此操作?

使用以下字符串作为正则表达式:

"\\[Text:(.*?)\\]"
第一个捕获组将为您提供所需的子字符串


非贪婪匹配(
*?
)需要使其在第一个
]
处停止,而不是同时包含
[Elem:123]

使用以下字符串作为正则表达式:

"\\[Text:(.*?)\\]"
String.substring(int beginIndex, int endIndex)
第一个捕获组将为您提供所需的子字符串

非贪婪匹配(
*?
)需要使其在第一个
]
处停止,而不是同时包括
[Elem:123]

String.substring(int beginIndex, int endIndex)
返回作为此字符串的子字符串的新字符串

您可以使用它删除字符串的开头和结尾

或者

你可以用

String.indexOf(String str) 
获取匹配开始和结束的索引,并将内容复制到新的结果字符串

你可以用

String.matches(String regex) 
然而,编写正则表达式可能会变得困难

我希望这有帮助

Pattern p = Pattern.compile("\\[Text:(.*?)\\]");
Matcher m = p.matcher("[Qual:3] [Text:PIX 1252471471953/YHYF/PPP121.40/10RTY10/NOLXX08X1] [Elem:123]");
m.find();
System.out.println(m.group(1));
返回作为此字符串的子字符串的新字符串

您可以使用它删除字符串的开头和结尾

或者

你可以用

String.indexOf(String str) 
获取匹配开始和结束的索引,并将内容复制到新的结果字符串

你可以用

String.matches(String regex) 
然而,编写正则表达式可能会变得困难

我希望这有帮助

Pattern p = Pattern.compile("\\[Text:(.*?)\\]");
Matcher m = p.matcher("[Qual:3] [Text:PIX 1252471471953/YHYF/PPP121.40/10RTY10/NOLXX08X1] [Elem:123]");
m.find();
System.out.println(m.group(1));
给出:

PIX 1252471471953/YHYF/PPP121.40/10RTY10/NOLXX08X1
\\[
\\]
用于转义括号,括号是正则表达式中的特殊字符。
*?
是一个非贪婪的量词,因此当它到达结束括号时,它停止吞食字符。正则表达式的这一部分在捕获组
()
中给出,您可以使用
m.group(1)
访问该组

给出:

PIX 1252471471953/YHYF/PPP121.40/10RTY10/NOLXX08X1
\\[
\\]
用于转义括号,括号是正则表达式中的特殊字符。
*?
是一个非贪婪的量词,因此当它到达结束括号时,它停止吞食字符。正则表达式的这一部分是在捕获组
()
中给出的,您可以使用
m.group(1)

访问该组,而不是像其他人建议的那样使用
“\\\[Text:(.*?\\]”
,我会更进一步,使用lookarounds筛选出您不想要的文本:

(?而不是像其他人建议的那样使用
“\\[Text:(.*?\\]””
,我会更进一步,使用lookarounds过滤掉您不想要的文本:


(?
\\[Text:(.*)\\].
从我的头顶使用
String.substring(int,int)
String.indexOf(String,int)
我一直在尝试改变这里的建议
\[Text:(.*).
从我的头顶使用
String.substring(int,int)
String.indexOf(String,int)
我一直在尝试对这里的建议进行修改,比我快!+1。@mip,注意
*?
*
之间的区别。一位评论者建议
*
,但这不起作用;它不会停在应该停的地方。快来吧!+1。@mip,注意
*?
*
之间的区别。一个很多评论者建议
*
,但这不起作用;它不会停在它应该停的地方。谢谢。Java会是什么样子?我会替换
m.find
m.group(1)
?谢谢。Java会是什么样子?我会替换
m.find
m.group(1)