猿问

有关显示编号的一些疑问,详见问题描述,谢谢了

使用显式编号重复代替问号、星号和加号

我见过使用显式编号重复的regex模式,而不是?*+,即:

Explicit            Shorthand(something){0,1}    (something)?(something){1}      (something)(something){0,}   
  (something)*(something){1,}     (something)+

问题如下:

  • 这两种形式是相同的吗?如果你添加了所有格/不情愿的修饰语呢?
  • 如果它们是相同的,哪一个更地道?更易读?简单地说“更好”?


神不在的星期二
浏览 490回答 3
3回答

幕布斯6054654

据我所知,它们是相同的。我认为可能有一些引擎不支持编号语法,但我不确定哪一个。我隐约记得几天前的一个问题,在记事本+中,显式表示法是行不通的。我唯一使用显式编号重复的时间是当重复大于1时:确切地说是两个:{2}两个或两个以上:{2,}二至四:{2,4}我倾向于这些,特别是当重复的模式是超过几个字符。如果你必须匹配3个数字,有些人喜欢写:\d\d\d但我宁愿写\d{3}因为它强调重复的次数。此外,在未来的道路上,如果这个数字需要改变,我只需要改变。{3}到{n}不要在我脑子里重新解析正则表达式,也不要担心把它搞砸;它需要的脑力更少。如果不符合这个标准,我更喜欢速记。使用“显式”表示法很快就会把模式弄得乱七八糟,很难读懂。我做过一个项目,有些开发人员对regex不太了解(这并不是每个人最喜欢的话题),我看到了很多{1}和{0,1}事故。有几个人会要求我对他们的模式进行代码检查,这时我建议将这些现象改为简写符号,并节省空间,并且,IMO,提高可读性。

繁花不似锦

我可以看出,如果有一个正则表达式可以执行大量有限制的重复,那么您可能需要使用{n,m}为了可读性起见,格式一致。例如:/^  abc{2,5}  xyz{0,1}  foo{3,12}  bar{1,}  $/x但我不记得在现实生活中见过这样的情况。当我看到{0,1}, {0,}或{1,}在一个问题中使用它,几乎总是出于无知。在回答这个问题的过程中,我们也应该建议他们使用?, *或+相反。当然,{1}纯粹的杂乱。有些人似乎有一种模糊的概念,认为它意味着“唯一的一个”-毕竟,它一定意味着某物对吧?为什么这样一种在病理上简洁的语言会支持一个包含三个字符的结构,却什么也不做呢?据我所知,它唯一合法的用途是分离一个后跟文字数字的反向引用。\1{1}0),但还有其他方法可以做到这一点。

翻翻过去那场雪

它们都是相同的,除非你使用的是特殊的正则引擎。然而,并非所有regex引擎都支持编号重复,?或+.如果所有这些都可用,我会使用字符而不是数字,因为它对我来说更直观。
随时随地看视频慕课网APP
我要回答