4

教科书教我们使用 epsilon(ε)符号编写正则表达式,但是我怎样才能将该符号直接转换为代码,而不必完全修改我的正则表达式呢?

例如,我将如何编写这个正则表达式来捕获所有开始或结束a(或两者)的小写字符串。

不是 100% 确定这是正确的,但是...

((a| epsilon)[az] *a) | (a[az] *(a| epsilon))

所以一些应该匹配的字符串包括:

a //single "a" starts or ends with "a"

aa //starts and ends with "a"

ab //starts with "a"

ba //ends with "a"

aba //starts and ends with "a"

aaaaaaaa //starts and ends with "a"

abbbbbbb //starts with "a"

bbbbbbba //ends with "a"

abbbbbba //starts and ends with "a"

asdfhgdu //starts with "a"

onoineca //ends with "a"

ahnrtyna //starts and ends with "a"

我只用什么来换取epsilon正确的符号,我不想修改其余表达式的任何部分。另外我想清楚一点,我实际上并没有检查 epsilon 符号,我想选择一个字符或什么都没有(不是什么都没有……epsilon)。

这样的符号存在吗?

我想要的可能吗?

4

1 回答 1

11

只需省略 ,因为它表示空字符串:

([1-9]|)[0-9]*

对于这种特殊情况,还有一个捷径:

([1-9]?)[0-9]*

?表示前面的标记出现零次或一次。

于 2010-09-15T09:33:19.197 回答