4

教科書では、イプシロン(ε)記号を使用して正規表現を書く方法を教えていますが、正規表現を完全に作り直すことなく、その記号をコードに直接変換するにはどうすればよいですか?

たとえば、この正規表現をどのように記述すれば、開始または終了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するものだけで、式の残りの部分を変更したくありません。また、明確にしておきたいのですが、実際にはイプシロンシンボルをチェックしていません。文字を選択するか、何も選択しないようにします(何もしない...イプシロン)。

そのようなシンボルは存在しますか?

私が欲しいことは可能ですか?

4

1 に答える 1

11

は空の文字列を表すため、単に省略します。

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

この特定のケースのショートカットもあります。

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

?、前のトークンが 0 回または 1 回出現することを意味します。

于 2010-09-15T09:33:19.197 に答える