我的大学要求我提供一个正则表达式,只有在测试字符串结束时才匹配
<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.rar
或part01.rar
(依此类推)。
应匹配:
foo.part1.rar
xyz.part01.rar
archive.rar已
part3_is_the_best.rar
不应该匹配:
foo.r61
bar.part03.rar
test.sfv
我立即想出了正则表达式part001.rar
。 But this does match for bar.part03.rar
接下来我尝试在断言后添加负面看法:\.(part0*1\.)?rar$
这也没有用,因为查看断言需要固定宽度。
然后我尝试使用正则表达式条件。但那也没有用。
所以我的问题:这可以通过使用纯正则表达式解决吗?
答案应该包含指向regex101.com的链接,提供可行的解决方案,或解释为什么它可以通过使用纯正则表达式来工作。
答案 0 :(得分:1)
您可以使用前瞻来验证原始正则表达式失败的一个案例(.rar
.part
部分,但0*1
}不可信任:
^(?!.*\.part0*[^1]\.rar$).*\.(part0*1\.)?rar$
答案 1 :(得分:0)
这是一个古老的问题,但这是另一种方法:
(?:\.part0*1\.rar|^(?<!\.)\w+\.rar)$
想法是匹配:
.part0*1.rar
结尾的字符串(例如foo.part01.rar,foo.part1.rar,bar.part001.rar)或.rar
结尾并且在此之前不包含任何其他点(.
)的字符串。处理所有测试用例,以及额外的foo.part19.rar
。