正则表达式:非固定宽度看看断言?

时间:2016-01-10 21:11:02

标签: regex

我的大学要求我提供一个正则表达式,只有在测试字符串结束时才匹配 <div class="col-sm-12 col-md-12 col-lg-6"> <div class="table-responsive"> <table class="table table-condensed"> <tbody> <tr ng-repeat="checkboxGroup in section.sectionFutureCheckboxes"> <td style="border-top:none" nowrap align="center" ng-repeat="checkbox in checkboxGroup.checkboxes"> <div class="checkbox checkbox-primary"> <input id="{{checkbox.id}}" type="checkbox" ng-model="model[checkbox.model]"> <label for="{{checkbox.for}}"><b>{{checkbox.label}}</b></label> </div> </td> </tr> </tbody> </table> <h5 class="future-table-h5"><b><i>*** Future Status - **Concept lots are not calculated in total</i></b></h5> </div> </div> .rar.part1.rarpart01.rar(依此类推)。

应匹配:

  

foo.part1.rar
  xyz.part01.rar
  archive.rar已
  part3_is_the_best.rar

不应该匹配:

  

foo.r61
  bar.part03.rar
  test.sfv

我立即想出了正则表达式part001.rarBut this does match for bar.part03.rar

接下来我尝试在断言后添加负面看法:\.(part0*1\.)?rar$这也没有用,因为查看断言需要固定宽度。

然后我尝试使用正则表达式条件。但那也没有用。

所以我的问题:这可以通过使用纯正则表达式解决吗?

答案应该包含指向regex101.com的链接,提供可行的解决方案,或解释为什么它可以通过使用纯正则表达式来工作。

2 个答案:

答案 0 :(得分:1)

您可以使用前瞻来验证原始正则表达式失败的一个案例(.rar .part部分,但0*1}不可信任:

^(?!.*\.part0*[^1]\.rar$).*\.(part0*1\.)?rar$

See it in action

答案 1 :(得分:0)

这是一个古老的问题,但这是另一种方法:

(?:\.part0*1\.rar|^(?<!\.)\w+\.rar)$

想法是匹配:

  • .part0*1.rar结尾的字符串(例如foo.part01.rar,foo.part1.rar,bar.part001.rar)或
  • .rar结尾并且在此之前不包含任何其他点(.)的字符串。

处理所有测试用例,以及额外的foo.part19.rar

https://regex101.com/r/EyHhmo/2