【发布时间】:2019-09-30 12:53:06
【问题描述】:
与许多人一样,我正在努力解决看似“微不足道”的正则表达式问题。 在给定的文本中,每当我遇到 {} 括号内的单词时,我都需要提取它。起初我使用
"\\{-?(\\w{3,})\\}"
一切正常:
只要单词没有任何空格或特殊字符,如 ' 。 例如 {Project} 返回 Project。但 {Project Test} 或 {Project D'arce} 不返回任何内容。 我知道对于白色字符我需要使用 \s。但是我绝对不清楚如何添加到上面,我试过了:
"%\\{-?(\\w(\\s{3,})\\)\\}"))
但不工作。另外,如果我想添加包含特殊字符的单词,如 ' ???真的很郁闷
【问题讨论】:
-
您可能想要反转大括号之间的部分,例如类似于
\{([^}]{3,})\}。这将匹配一对花括号之间的任何内容。[^}]表示“任何 除了 结束花括号。但是请注意,这可能会变得很棘手,我会认真考虑允许这么多,因为这可能会导致很难找到错误,如果要求或数据更改。为什么您首先要允许空格和特殊字符进行匹配?这给人的印象是您要解析代码……是这样吗? -
嗨,Thomas,谢谢,它有效。不是真正的代码,而是带有“限制”的文本。但是如果我需要设置一些限制,例如不允许数字,还是某种字符?
-
好吧,在这种情况下,您要么列出您不想允许的所有内容(例如,
[^\d}]表示额外的“无数字”),或者使用正字符类列出您想要允许的所有内容,例如[\w\s]表示任何单词字符或空格。您使用什么取决于您的要求,例如是否要使用黑名单(禁止已知字符)或白名单(仅允许已知字符)。 -
感谢 Thomas、Pshemo 和其他人
标签: java regex regex-negation regex-lookarounds