Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.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,我必须提取字符串的一部分 xyz 假设字符串是 "this is a string "xyz" " 我想从这里提取的是字符串 xyz 但问题是我有两个相同字符串的变体 "this is a string "xyz" " "this is a string - " 我想提取 xyz or - 我试过拔取器 ".*((?:")[^"]*(?:")|-).*".r 这提取了-它也提取了字符串,但我不排除引号。 当我给出上面提到的2字符串时得到的结果如

我必须提取字符串的一部分

    xyz
假设字符串是

    "this is a string "xyz" "
我想从这里提取的是字符串

    xyz
但问题是我有两个相同字符串的变体

"this is a string "xyz" "
"this is a string - "
我想提取

    xyz or -
我试过拔取器

    ".*((?:")[^"]*(?:")|-).*".r
这提取了-它也提取了字符串,但我不排除引号。 当我给出上面提到的2字符串时得到的结果如下

    "xyz" instead of xyz
    - as expected

提前谢谢。

如果你送的是适合你的,那么这个应该可以

(?<=").*((?:")[^"]*(?:")|-).*(?=")

(?如果你给的是对你有用的,那么这个应该很好用

(?<=").*((?:")[^"]*(?:")|-).*(?=")
(?使用,即更换:

(?:")[^"]*(?:")

但是,这些更改引入了一个新问题,因为环视可以尝试匹配外部大括号,而普通匹配则无法。如果您将
*
替换为
+
,则应该可以防止此问题(假设这对
-
匹配有效,则引号匹配应相同,因为使用了环视)

最终正则表达式:

".+((?<=")[^"]*(?=")|-).+"
”+((?使用,即替换:

(?:")[^"]*(?:")

但是,这些更改引入了一个新问题,因为环视可以尝试匹配外部大括号,而普通匹配则无法。如果您将
*
替换为
+
,则应该可以防止此问题(假设这对
-
匹配有效,则引号匹配应相同,因为使用了环视)

最终正则表达式:

".+((?<=")[^"]*(?=")|-).+"

“+((?对于您提供的示例,您不需要像环顾四周这样的东西

您可以简单地使用反向引用来确保“包装”目标的所有内容都是
”-或者什么都不是:

^这是一个(“|”)([^”\s]+)(\1)\s*$

只要下一个字符串周围有
,它们就不会成为匹配的一部分。 如果没有引号,则忽略模式的这一部分。结尾处的反向引用只是确保我们不匹配类似的内容,这是一个字符串“xy(它告诉我们:只要有前导的
,我们就需要一个尾随的。)


对于您提供的示例,您不需要四处看看

您可以简单地使用反向引用来确保“包装”目标的所有内容都是
”-或者什么都不是:

^这是一个(“|”)([^”\s]+)(\1)\s*$

只要下一个字符串周围有
,它们就不会成为匹配的一部分。 如果没有引号,则忽略模式的这一部分。结尾处的反向引用只是确保我们不匹配类似的内容,这是一个字符串“xy(它告诉我们:只要有前导的
,我们就需要一个尾随的。)



只需使用匹配的组或向前/向后。你能详细解释一下吗?只需使用匹配的组或向前/向后。你能详细解释一下吗?我想大括号的数量是阻止你的原因,它们在你给出的正则表达式中不匹配。你调查过了吗?我检查了我提供的正则表达式并使用了相同的两个字符串,对我来说效果很好。谢谢你的反馈@DirtyDexter我认为括号的数量是阻止你的原因,它们在你提供的正则表达式中不匹配。你调查过了吗?我检查了我提供的正则表达式,使用了相同的两个字符串,对我来说效果很好。谢谢你的反馈@DirtyDexter,这将解决问题问题,但引入了一个新问题,即
-
现在未被检测到。感谢解决我问题的提示音。
.r
将其作为已编译的正则表达式对象。再次感谢。@Dukeling这将解决问题,但引入了一个新问题,即
-
现在未被检测到。感谢提示音解决了我的问题。
.r
将其作为已编译的正则表达式对象。再次感谢。@Dukelings因为正则表达式没有使用前缀为“this is a string”的事实,前缀可能会改变,因此将其硬编码到正则表达式中是行不通的。我举了一个例子,这意味着TCs给定的字符串总是以相同的部分开头。因为正则表达式不使用前缀为“this is a string”的事实,前缀可能会改变,因此将其硬编码到正则表达式中是行不通的。我举了一个例子,这意味着TCs给定的字符串总是以相同的部分开头。