假设我有一个文档,我想在之前或之后捕获具有括号的字符串。
示例:This [is] a {{test}} sentence. The (((end))).
基本上我希望得到is
,test
和end
这两个字。
提前致谢。
答案 0 :(得分:1)
你的正则表达式可能是:
[\[{(]((?(?<=\[)[^\[\]]+|(?(?<={)[^{}]+|[^()]+)))
说明:需要if-then-else结构以确保开头'{'与结束'}'匹配等等。
[\[{(] # Read [, { or (
((?(?<=\[) # Lookbehind: IF preceding char is [
[^\[\]]+ # THEN read all chars unequal to [ and ]
| # ELSE
(?(?<={) # IF preceding char is {
[^{}]+ # THEN read all chars unequal to { and }
| # ELSE
[^()]+))) # read all chars unequal to ( and )
请参阅regex101.com
答案 1 :(得分:1)
试试这个正则表达式:
(?<=\(|\[|{)[^()\[\]{}]+
或者这个:
(?<=\(|{|\[)(?!\(|{|\[)[^)\]}]+
解释(第一个正则表达式):
(?<=\(|\[|{)
- 正面观察 - 在{
或[
或(
[^()\[\]{}]+
- 不属于以下字符的任何字符的一个或多个出现:[
,(
,{
,}
,{{ 1}},)
解释(针对第二个正则表达式):
]
- 正面观察 - 在(?<=\(|\[|{)
或{
或[
(
- 否定前瞻 - 在上一步中,它找到了前面有一个左括号的位置。这段正则表达式验证它没有跟随另一个开放括号。因此,匹配最里面的开口括号后的位置 - (?!\(|{|\[)
,(
或{
。
[
- 不在这些右括号中的一个或多个字符出现 - [^)\]}]+
,]
,}
答案 2 :(得分:1)
根据您的情况&#34; 字符串在或之后具有括号&#34; - 任何单词都可以用OR进行,后跟一些类型的括号:
$text = 'This [is] a {{test}} sentence. The (((end))). Some word))';
preg_match_all('/(?:\[+|\{+|\(+)(\w+)|(\w+)(?:\]+|\}+|\)+)/', $text, $m);
$result = array_filter(array_merge($m[1],$m[2]));
print_r($result);
输出:
Array
(
[0] => is
[1] => test
[2] => end
[7] => word
)
答案 3 :(得分:1)
以下代码适用于我。
<?php
$in = "This [is] a {{test}} sentence. The (((end))).";
preg_match_all('/(?<=\(|\[|{)[^()\[\]{}]+/', $in, $out);
echo $out[0][0]."<br>".$out[0][1]."<br>".$out[0][2];
?>