如何在递归匹配括号正则表达式中捕获内部模式?

时间:2016-10-03 19:16:08

标签: recursion pcre brackets

我有这样的行:

[something]
[[something else]]
[[[another text here]]]
...

我想要捕获内部文本somethingsomething elseanother text here

为此,我写了这个regex

m/^([^\[\]]+|\[(?1)\])$/gm

不幸的是,即使我在[^\[\]]+附近放置一个捕获组,它也不会捕获内部文本。我想捕获组在第一次匹配时锁定其内容,而不是在最后一次递归期间。

如何使用捕获组捕获内部文本?

1 个答案:

答案 0 :(得分:2)

使用PCRE无法从地面级别的递归中获取捕获组内容。

您的特定示例的解决方法是不使用递归功能并检查每个左括号是否始终有一个结束括号:

       //weather icons check       
          if(weatherId=800){
             $('#type').css('background-image', 'url(http://publicdomainvectors.org/photos/weather-clear.png)');
          }
          else if(weatherId>=801 && weatherId<=804){
              $('#type').css('background-image','url(http://publicdomainvectors.org/tn_img/stylized_basic_cloud.png)');
          }
          else if(weatherId>=300 && weatherId<=531){
               $('#type').css('background-image','url(http://publicdomainvectors.org/tn_img/sivvus_weather_symbols_4.png)');
          }

(在第2组,https://stackoverflow.com/search?q=%5Bsony-camera-api%5D+usb

但是你不能用这种方式使用更复杂的字符串(在同一级别有几个组)。