给出以下示例字符串:"[ One].[Two ].[ Three ].[Four]"
我想匹配"One"; "两个","三个"和"四个".
换句话说:无论在这个单词周围有多少个空格,我都需要在括号之间得到这个词.
我用以下表达式尝试了它:
(?<=\[)(?s)(.*?)(?=\s*\])
Run Code Online (Sandbox Code Playgroud)
这导致" One","Two"," Three"和"Four".
编辑: 这比我第一次尝试的要复杂得多:
"[one]"或"[one] [two][three].[four]")分隔."[one]"或"[two ]"或"[ three ]"."These words [word-1] .. [word-n] are well known"或
"These words [word-1] .. [word-n] are well known".请注意,"[word-1] .. [word-n]"只代表上述块的任意计数.
我想只匹配括号中的单个单词,并消除环绕序列("These words"和"are well known")以及括号内和块之间可能存在的空格.另外,块之间可能存在的char(它不能只有一个)也应该被消除.希望这不是太奇怪;)
Tom*_*lak 10
您可以使用此功能,并启用"全局"标志
\[\s*(\S+?)\s*\]
Run Code Online (Sandbox Code Playgroud)
说明
\[ # a literal "[" \s* # any number of white space (\S+?) # at least one non white-space character, non-greedily (group 1) \s* # any number of white space \] # a literal "]"
编辑:
@Kobi指出,\S+?实际上可以匹配]像目标一样的目标"[ One]".所以暂时,第1组将包含"One]".
但随后还有就是\]在正则表达式,此时正则表达式引擎会走回头路,给结束"]"到\],这样的表达可以成功.
在这里使用on-greedy匹配是非常重要的(\S+?相反\S+).我的答案的第一个版本也出错了.
此外,\S非常不明确.如果你有什么更具体的"一个字"对你来说 - 无论如何,使用它.