正则表达式定义常规语言

时间:2013-11-06 16:57:08

标签: java regex regex-negation

我需要为常规语言编写正则表达式,其字符串始终以1开头,偶数为0。

我已经尝试过Java中的^ 1 +(00)+(1 | 00)*并且它接受100,1100100,10011001等字符串但是它不接受10101010而0的数量甚至。请问有谁更好地定义正则表达式?

2 个答案:

答案 0 :(得分:5)

试试这个:

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

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

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

答案 1 :(得分:3)

  

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