【问题标题】:Regular Expression to define a Regular Language定义正则语言的正则表达式
【发布时间】:2013-11-18 00:59:26
【问题描述】:

我需要为一种正则语言编写一个正则表达式,它的字符串总是以 1 开头并且有偶数个 0。

我已经在 J​​ava 中尝试过 ^1+(00)+(1|00)* 并且它确实接受诸如 100、100100、10011001 等字符串,但是它不接受 10101010 而 0 的数量是偶数.请有更好的想法来定义正则表达式吗?

【问题讨论】:

    标签: java regex regex-negation


    【解决方案1】:

    试试这个:

    "^1+(01*01*)*$" 
    

    根据您尝试的正则表达式,我假设只允许使用 0 和 1。如果你想允许其他字符:

    "^1[^0]*(0[^0]*0[^0]*)*$"
    

    【讨论】:

    • @Lourin 您的答案将不接受"1""11111" 等字符串。它们有零个0,但零是偶数。如果要求 0 的个数至少为 2,那么您的更改是正确的。
    • 感谢您。是的,字符串中必须出现 0(偶数次)。
    【解决方案2】:

    I need to write a regular expression for a regular language which its strings always start with 1 and have even number of 0s.

    这个基于前瞻的正则表达式应该适合你:

    /^1(?=(([^0]*0){2})*[^0]*$)/
    
    /^1(?=(([^0]*0){2})*[^0]*$)/.test('10'); // false
    /^1(?=(([^0]*0){2})*[^0]*$)/.test('1000000'); // true
    /^1(?=(([^0]*0){2})*[^0]*$)/.test('000000'); // false
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-31
      • 1970-01-01
      • 2013-11-01
      • 1970-01-01
      • 2013-04-27
      • 1970-01-01
      • 2011-02-22
      相关资源
      最近更新 更多