我要抓住{ ... }里面所有的角色,
如果在里面找不到"{“和"}”
例如:
{amdnia91(\+wowa}抓住它。
{amdn{ia91(\+wowa}不捕获(包含"{")。
preg_match_all('#(.+?)\{(.+?)\}#', $input, $output);怎么修呢?
编辑。解释得更多:
我将尝试创建css扫雷器。但在这里,我需要将括号中的所有名称和内容作为单独的数组值捕获。
Curret $input如下所示:
.something{property:value;prop2:value}#something2{someprop:val;prop:val}它也被缩小,因此包含多个.{}.{}内联。我的代码很好但是..。如果在括号内括起它的括号,也会捕获它,但如果其中包含括号,则不希望捕获它。
发布于 2016-04-18 10:19:00
[^}{]意味着匹配任何不是}或{的字符。
所以:
preg_match_all('#\{([^}{]+)\}#', $input, $output);但是,请注意,在{amdn{ia91(+wowa}示例中,这将与ia91(+wowa片段匹配。
编辑
如果对第二个示例根本不需要任何匹配,请尝试如下:
preg_match_all('#^[^}{]*\{([^}{]+)\}[^}{]*$#', $input, $output);破坏的判罚意味着:
^ -行的开头[^}{]* -任何不是{或}零或多次的字符\{ -文字{字符([^}{]+) -捕获一个或多个不是{或}的字符\} -文字}字符[^}{]* -任何不是{或}零或多次的字符$ -行的末尾第二版
鉴于你对所需的进一步解释,我建议如下:
preg_match_all('#(?<=^|})[^}{]*?\{([^}{]+?)\}(?=[^}]*$|[^}]*\{)#', $input, $output);这使用了“前瞻性”和“前瞻性”。分解,这意味着:
(?<=^|})查找后面:断言这要么是行的开始,要么是前面的字符是文字'}‘,但不包括该字符作为整个匹配的一部分。[^}{]*? -懒惰地匹配不为{或}的零或多个字符。\{ -文字{([^}{]+?) -懒散地捕获一个或多个不是{或}的字符\} -A文字}(?=[^}]*$|[^}]*\{) -向前看:确保以下字符为零或多个字符,行结束后不},或零个或多个字符不是}后面跟着文字{,但不包括这些字符作为整个匹配的一部分发布于 2016-04-18 10:15:23
我发布了一种替代daiscog发布的regex的方法,基于匹配我们不需要的内容并省略它的概念,并且只在PCRE (*SKIP)(*FAIL)谓词的帮助下匹配我们稍后需要的内容:
[#.]?[^{}]*{[^{}]*[{}][^{}]*}(*SKIP)(*F)|[#.]?[^{}]*{([^{}]+)}它匹配什么?
[#.]?[^{}]*{[^{}]*[{}][^{}]*}(*SKIP)(*F) --一个可选的.或# (参见[#.]?),后面跟着{和}以外的0+字符(参见[^{}]*),后面跟着[^{}]*,后面跟着{或} (请参见[{}]),然后再加上[^{}]*和结束d20。此部分与字符串(如.something{或nothing )匹配。然后,一旦匹配,从由于(*SKIP)(*FAIL)谓词返回的匹配中丢弃此匹配。| -或者.[#.]?[^{}]*{([^{}]+)} --一个可选的.或# (参见[#.]?),后面跟着{和}以外的0+字符(参见[^{}]*),然后是{,然后是大括号([^{}]+)以外的1+字符和一个大括号}。这是我们将保持和得到的火柴。$re = '~[#.]?[^{}]*{[^{}]*[{}][^{}]*}(*SKIP)(*F)|[#.]?[^{}]*{([^{}]+)}~';
$str = "{amdnia91(+wowa}\n{amdn{ia91(+wowa}\n.something{property:value;prop2:value}#something2{someprop:val;prop:val}\n.something{property:value{;prop2:value}#something2{someprop:val;prop:val}\n.something{property:v}alue;prop2:value}#something2{someprop:val;prop:val}";
preg_match_all($re, $str, $matches);
print_r($matches);结果:
Array
(
[0] => Array
(
[0] => {amdnia91(+wowa}
[1] =>
.something{property:value;prop2:value}
[2] => #something2{someprop:val;prop:val}
[3] => #something2{someprop:val;prop:val}
[4] => #something2{someprop:val;prop:val}
)
[1] => Array
(
[0] => amdnia91(+wowa
[1] => property:value;prop2:value
[2] => someprop:val;prop:val
[3] => someprop:val;prop:val
[4] => someprop:val;prop:val
)
)https://stackoverflow.com/questions/36691046
复制相似问题