简单的正则表达式问题。我有一个字符串的以下格式:

this is a [sample] string with [some] special words. [another one]

提取方括号内的单词的正则表达式是什么?

sample
some
another one

注意:在我的用例中,括号不能嵌套。


当前回答

(?<=\[).+?(?=\])

将捕获没有括号的内容

(?<=\[) -[的正向回溯 . * ?-非贪婪匹配的内容 (?=\]) -正向预测]

编辑:对于嵌套括号,下面的正则表达式应该工作:

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

其他回答

这段代码将提取方括号和圆括号之间的内容

(?:(?<=\().+?(?=\))|(?<=\[).+?(?=\]))

(?: non capturing group
(?<=\().+?(?=\)) positive lookbehind and lookahead to extract the text between parentheses
| or
(?<=\[).+?(?=\]) positive lookbehind and lookahead to extract the text between square brackets

如果有人想匹配并选择一个在方括号内包含一个或多个圆点的字符串,如“[fu.]”。Bar]"使用以下语句:

(?<=\[)(\w+\.\w+.*?)(?=\])

正则表达式测试器

如果你不想在匹配中包含括号,下面是正则表达式:(?<=\[).*?(?=\])

让我们来分析一下

的。匹配除行结束符以外的任何字符。?=是一个正面的前瞻。当某个字符串跟在某个字符串后面时,正向向前查找该字符串。<=是一个正向的后视。当某个字符串位于某个字符串的前面时,正向向后查找查找该字符串。引用一下,

积极地向前看(?=) 在表达式B后面找到表达式A: (? = B) 正面看后面(?<=) 在表达式B中找到表达式A 之前: (? < = B)

另一种选择

如果您的正则表达式引擎不支持头视和后视,那么您可以使用正则表达式\[(.*?)\]来捕获组中括号的内部结构,然后您可以根据需要操作组。

这个正则表达式是如何工作的?

括号捕获组中的字符。. * ?以非贪婪的方式获取括号之间的所有字符(行结束符除外,除非启用了s标志)。

(?<=\[).+?(?=\])

将捕获没有括号的内容

(?<=\[) -[的正向回溯 . * ?-非贪婪匹配的内容 (?=\]) -正向预测]

编辑:对于嵌套括号,下面的正则表达式应该工作:

(\[(?:\[??[^\[]*?\]))
([[][a-z \s]+[]])

根据以下解释,上述方法应该有效

方括号[]内的字符定义了字符类,这意味着模式应该匹配方括号内提到的至少一个字符 \s指定一个空格 +表示前面提到的至少一个字符为+。