首页 > 解决方案 > 跳过 RegEx 分组

问题描述

我添加了一个带有正则表达式 ""\(.*?\)" 的代码来模式匹配 ( 和 ) 中包含的单词并替换这些值。例如:test_value_(obj_id)_(date_created) 将替换为 obj_id 和date_created。最终字符串将是“test_value_123_10/23/19”(obj_id 值为 123,date_created 为 10/23/19)

但是,如果有任何表达式用户需要 ( and ) 与最终字符串一起成为 value 的一部分。例如:test_value_((obj_id))_(date_created)。正则表达式模式不起作用,它不能识别组 obj_id。所以最终表达式返回为“test_value_((obj_id))_10/23/19”有什么办法可以解决吗?

标签: javaregex

解决方案


将正则表达式更改为

\([^()]*\)

它将仅匹配最里面的括号表达式。如果您的用户提供的字符串包含不包含要替换的表达式的括号对,您要么必须更严格地描述要替换的数据的模式,要么更改您使用的定界字符。

你可能想从

\([a-zA-Z_]+\)

作为您的模式,它匹配没有数字的带括号的标识符。


推荐阅读