java - 在捕获组中转义正则表达式

标签 java regex

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

假设字符串是

    "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

提前致谢。

最佳答案

使用look-around ,即替换:

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

(?<=")[^"]*(?=")

(?<=")是正向后查找,检查前一个字符是否为 " ,但不将其包含在匹配中。
(?=")是积极的前瞻,检查下一个字符是否是 " ,但不将其包含在匹配中。

如果您要在较大的字符串中搜索此内容,您可能还需要替换 .*.*? .*?将匹配尽可能少的字符,其中 .*将匹配尽可能多的。举个例子,给定 abbbaabbba :

a.*a  finds abbbaabbba as one match
a.*?a finds abbba and abbba separately

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

最终正则表达式:

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

我不确定.r是什么是为了。

Test .

关于java - 在捕获组中转义正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18734726/

相关文章:

javax.ws.rs.NotFoundException : HTTP 404 Not Found angular 1. 5

java - 运行其他 jar 文件时,Ant buildfile 无法将 jar 文件放入类路径中

JavaScript 正则表达式不匹配确切的字符串

regex - 使用 sed 和正则表达式删除前缀

java - 如何将 java ArrayList 转换为数组?

java - 使用 Spring 的事务管理器进行回滚

java - 没有文件选择器的webview从输入字段打开相机

Java正则表达式排除文件路径中的点

regex - 结合删除标签正则表达式和删除 sed 中的空行 - Unix

python - 使用 Python 和 BeautifulSoup 获取字符串中 1-10 的正则表达式时出现问题