【发布时间】:2013-11-18 00:59:26
【问题描述】:
我需要为一种正则语言编写一个正则表达式,它的字符串总是以 1 开头并且有偶数个 0。
我已经在 Java 中尝试过 ^1+(00)+(1|00)* 并且它确实接受诸如 100、100100、10011001 等字符串,但是它不接受 10101010 而 0 的数量是偶数.请有更好的想法来定义正则表达式吗?
【问题讨论】:
标签: java regex regex-negation
我需要为一种正则语言编写一个正则表达式,它的字符串总是以 1 开头并且有偶数个 0。
我已经在 Java 中尝试过 ^1+(00)+(1|00)* 并且它确实接受诸如 100、100100、10011001 等字符串,但是它不接受 10101010 而 0 的数量是偶数.请有更好的想法来定义正则表达式吗?
【问题讨论】:
标签: java regex regex-negation
试试这个:
"^1+(01*01*)*$"
根据您尝试的正则表达式,我假设只允许使用 0 和 1。如果你想允许其他字符:
"^1[^0]*(0[^0]*0[^0]*)*$"
【讨论】:
"1"、"11111" 等字符串。它们有零个0,但零是偶数。如果要求 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
【讨论】: