这是一个示例字符串:
123456#p654321
目前,我正在使用这场比赛来捕捉123456
and 654321
分为两个不同的组:
([0-9].*)#p([0-9].*)
但有时,#p654321
字符串的一部分不会存在,所以我只想捕获第一组。我试图通过附加使第二组“可选”?
到它,这有效,但只有当有一个#p
在剩余字符串的末尾。
解决这个问题的最佳方法是什么?
你有#p
在捕获组之外,这使得它成为结果的必需部分。您还使用了点字符 (.
) 不当。点(在大多数正则表达式变体中)将匹配任何字符。将其更改为:
([0-9]*)(?:#p([0-9]*))?
The (?:)
语法是获取非捕获组的方式。然后,我们只捕获您感兴趣的数字。最后,我们将整个事情设为可选。
此外,大多数 reg-ex 变体都有一个\d
数字的字符类。所以你可以进一步简化:
(\d*)(?:#p(\d*))?
正如另一个人指出的那样,*
运算符可能会匹配zero数字。为了防止这种情况发生,请使用+
运算符改为:
(\d+)(?:#p(\d+))?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)