8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

使用明确编号的重复代替问号、星号和加号

CcmU 1月前

47 0

我见过使用明确编号重复而不是?、* 和 + 的正则表达式模式,即:显式速记(某物){0,1}(某物)?(某物){1}(某物)(某物...

我见过使用明确编号的重复而不是 ? , * and 的 + ,即:

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

问题是:

  • 这两种形式是否相同?如果添加所有格/不情愿修饰语会怎样?
  • 如果它们相同,哪一个更符合惯用语?更具可读性?还是简单来说“更好”?
帖子版权声明 1、本帖标题:使用明确编号的重复代替问号、星号和加号
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由CcmU在本站《regex》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 据我所知,它们是相同的。我认为可能有一些引擎不支持数字语法,但我不确定是哪些。我隐约记得几天前在 SO 上有一个问题,其中显式符号在 Notepad++ 中不起作用。

    我唯一会使用明确编号重复的情况是重复次数大于 1 时:

    • 正好两个: {2}
    • 两个或两个以上: {2,}
    • 二至四: {2,4}

    我倾向于使用这种方法,尤其是当重复模式包含多个字符时。如果必须匹配 3 个数字,有些人喜欢写成: \d\d\d 但我宁愿写成: \d{3} 因为它强调了所涉及的重复次数。此外,如果以后需要更改该数字,我只需更改 {3} {n} ,而不必在脑海中重新解析正则表达式或担心弄乱它;它需要更少的脑力劳动。

    如果不符合该标准,我更喜欢简写。使用 \'explicit\' 符号会很快使模式变得混乱,难以阅读。我曾经参与过一个项目,其中有些开发人员不太了解正则表达式(它并不是每个人都喜欢的主题),我看到了很多 {1} and 的 {0,1} 出现。有几个人会要求我审查他们的模式,这时我会建议将这些出现改为简写符号,以节省空间,并且在我看来,可以提高可读性。

  • +1,我也认为简写更好,但我也喜欢嵌套三元组,而且我几乎因为这样做而被人大声呵斥。我可以看到有些人可能认为 {0,1} 比 ?“更清楚地表明意图”,因此有 Q。

  • 我可以理解,如果你有一个进行大量有界重复的正则表达式,你可能希望 {n,m} 为了可读性而一致地使用该形式。例如:

    /^
     abc{2,5}
     xyz{0,1}
     foo{3,12}
     bar{1,}
     $/x
    

    但我不记得在现实生活中见过这种情况。当我看到 {0,1} , {0,} 或被 {1,} 用在问题中时,几乎总是出于无知。在回答这类问题的过程中,我们还应该建议他们改用 ? , * +

    当然, {1} 这纯粹是胡乱的。有些人似乎有一个模糊的概念,认为它的意思是“一个且只有一个”——毕竟,它一定意味着 什么 ,对吧?为什么这种病态简洁的语言会支持一个占用三个字符却什么都不做的结构?据我所知,它唯一合法的用途是隔离后跟文字数字的反向引用(例如 \1{1}0 ),但还有其他方法可以做到这一点。

    • p0

    • p1

  • 它们是等效的(您可以通过测试您的上下文来了解它们是否可用。)

    我预计的问题是,您可能不是唯一需要使用您的代码的人。正则表达式对大多数人来说已经够难了。每当有人使用不寻常的语法时,就会出现疑问:“他们为什么不按标准方式做?他们认为我错过了什么?”

返回
作者最近主题: