简单的正则表达式问题.我有一个以下格式的字符串:
this is a [sample] string with [some] special words. [another one]
Run Code Online (Sandbox Code Playgroud)
提取方括号内的单词的正则表达式是什么,即.
sample
some
another one
Run Code Online (Sandbox Code Playgroud)
注意:在我的用例中,括号不能嵌套.
cod*_*ict 679
您可以在全局使用以下正则表达式:
\[(.*?)\]
Run Code Online (Sandbox Code Playgroud)
说明:
\[
:[
是一个元字符,如果你想要字面上匹配它需要转义.(.*?)
:以非贪婪的方式匹配所有内容并捕获它.\]
:]
是一个元字符,如果你想要字面上匹配它需要转义.Ada*_*ski 94
(?<=\[).+?(?=\])
Run Code Online (Sandbox Code Playgroud)
将无需括号捕获内容
(?<=\[)
- 正面的背后隐藏 [
.*?
- 内容的非贪婪匹配
(?=\])
- 积极前瞻 ]
编辑:对于嵌套括号,下面的正则表达式应该工作:
(\[(?:\[??[^\[]*?\]))
Run Code Online (Sandbox Code Playgroud)
jas*_*bar 84
这应该没问题:
\[([^]]+)\]
Run Code Online (Sandbox Code Playgroud)
Tim*_*ker 32
括号可以嵌套吗?
如果不是:\[([^]]+)\]
匹配一个项目,包括方括号.反向引用\1
将包含要匹配的项目.如果您的正则表达式支持环视,请使用
(?<=\[)[^]]+(?=\])
Run Code Online (Sandbox Code Playgroud)
这只会匹配括号内的项目.
Mic*_*ski 11
@Tim Pietzcker 的回答在这里
Run Code Online (Sandbox Code Playgroud)(?<=\[)[^]]+(?=\])
几乎就是我一直在寻找的那个。但有一个问题是,某些旧版浏览器可能会在积极的后向查找方面失败。所以我必须自己度过这一天:)。我设法写了这个:
/([^[]+(?=]))/g
Run Code Online (Sandbox Code Playgroud)
也许它会对某人有所帮助。
(?<=\[)[^]]+(?=\])
Run Code Online (Sandbox Code Playgroud)
小智 10
(?<=\[).*?(?=\])
根据上面给出的解释,效果很好.这是一个Python示例:
import re
str = "Pagination.go('formPagination_bottom',2,'Page',true,'1',null,'2013')"
re.search('(?<=\[).*?(?=\])', str).group()
"'formPagination_bottom',2,'Page',true,'1',null,'2013'"
Run Code Online (Sandbox Code Playgroud)
Emm*_*mma 10
以防万一,您可能有不平衡的括号,您可以设计一些递归表达式类似于,
\[(([^\]\[]+)|(?R))*+\]
Run Code Online (Sandbox Code Playgroud)
当然,这与您可能使用的语言或 RegEx 引擎有关。
除此之外,
\[([^\]\[\r\n]*)\]
Run Code Online (Sandbox Code Playgroud)
或者,
(?<=\[)[^\]\[\r\n]*(?=\])
Run Code Online (Sandbox Code Playgroud)
是探索的好选择。
如果你想简化/修改/探索表达式,它已经在regex101.com 的右上角面板中进行了解释。如果您愿意,您还可以在此链接中观看它如何与某些示例输入匹配。
jex.im可视化正则表达式:
\[(([^\]\[]+)|(?R))*+\]
Run Code Online (Sandbox Code Playgroud)
要匹配第一个和最后一个之间的 [
]
子字符串,您可以使用
\[.*\] # Including open/close brackets
\[(.*)\] # Excluding open/close brackets (using a capturing group)
(?<=\[).*(?=\]) # Excluding open/close brackets (using lookarounds)
Run Code Online (Sandbox Code Playgroud)
请参阅正则表达式演示和正则表达式演示 #2。
使用以下表达式匹配最近方括号之间的字符串:
包括括号:
\[[^][]*]
- PCRE, Python re
/ regex
, .NET, Golang, POSIX (grep, sed, bash)\[[^\][]*]
- ECMAScript(JavaScript、C++ std::regex
、VBA RegExp
)\[[^\]\[]*]
- Java 正则表达式\[[^\]\[]*\]
- Onigmo(Ruby,需要到处转义括号)不包括括号:
(?<=\[)[^][]*(?=])
- PCRE, Python re
/ regex
, .NET (C#, etc.), ICU (R stringr
), JGSoft Software\[([^][]*)]
- Bash , Golang -用一对未转义的括号捕获方括号之间的内容,另见下文\[([^\][]*)]
- JavaScript , C++std::regex
, VBARegExp
(?<=\[)[^\]\[]*(?=])
- Java 正则表达式(?<=\[)[^\]\[]*(?=\])
- Onigmo(Ruby,需要到处转义括号)注意:*
匹配 0 个或多个字符,用于+
匹配 1 个或多个字符以避免结果列表/数组中出现空字符串匹配。
当两种环视支持都可用时,上述解决方案依靠它们来排除前导/尾随打开/关闭支架。否则,依靠捕获组(已提供指向某些语言的最常见解决方案的链接)。
如果您需要匹配嵌套括号,您可能会在正则表达式中看到匹配平衡括号线程并将圆括号替换为方括号以获得必要功能的解决方案。您应该使用捕获组来访问排除了开/关括号的内容:
\[((?:[^][]++|(?R))*)]
- PHP PCRE\[((?>[^][]+|(?<o>)\[|(?<-o>]))*)]
- .NET 演示\[(?:[^\]\[]++|(\g<0>))*\]
- Onigmo (Ruby) 演示如果您只想在方括号 az 之间填充小字母
(\[[a-z]*\])
Run Code Online (Sandbox Code Playgroud)
如果您想要小号大写字母 a-zA-Z
(\[[a-zA-Z]*\])
Run Code Online (Sandbox Code Playgroud)
如果您想要小型大写字母和数字字母 a-zA-Z0-9
(\[[a-zA-Z0-9]*\])
Run Code Online (Sandbox Code Playgroud)
如果你想要方括号之间的所有内容
如果你想要文字、数字和符号
(\[.*\])
Run Code Online (Sandbox Code Playgroud)
如果您不想在比赛中包含方括号,请使用正则表达式: (?<=\[).*?(?=\])
在.
任何字符,除了行结束符匹配。这?=
是一个积极的展望。当某个字符串后面有正字符串时,正向查找将查找该字符串。这?<=
是一个积极的眼光。当某个字符串位于字符串之后时,正向后方查找字符串。引用此,
向前看积极(?=)
在表达式B后面找到表达式A:
A(?=B)
向后看积极(?<=)
查找表达式B前面的表达式A:
(?<=B)A
如果您的正则表达式引擎不支持先行和后向,则可以使用正则表达式\[(.*?)\]
捕获组中括号的内部,然后可以根据需要操作组。
括号捕获组中的字符。以非贪婪的方式.*?
获取方括号之间的所有字符(行终止符除外,除非s
启用了标志)。
归档时间: |
|
查看次数: |
492971 次 |
最近记录: |