非数字 (aa11aa1a) を含む文字列の桁数をカウントしたい。この問題を有限ステート マシンで解決できますか? この問題は正規表現で表現できますか?
カウントが「X」かどうか知りたいのですが、性質の問題は変わりますか? もっと正確に言うと、この文字列には 3 桁の数字がありますか? FSM は問題を解決するのに十分ですか?
非数字 (aa11aa1a) を含む文字列の桁数をカウントしたい。この問題を有限ステート マシンで解決できますか? この問題は正規表現で表現できますか?
カウントが「X」かどうか知りたいのですが、性質の問題は変わりますか? もっと正確に言うと、この文字列には 3 桁の数字がありますか? FSM は問題を解決するのに十分ですか?
The second problem can be solved with a regular expression.
Consider: ^[^0-9]*[0-9][^0-9]*[0-9][^0-9]*[0-9][^0-9]*$
.
You could also use groups: ^[^0-9]*([0-9][^0-9]*){3}$
I don't think you can use regular expressions alone to solve the first problem. But a solution using regular expressions (to remove all non-digits, or match a single digit) would be trivial.
3桁だけを一致させたい場合は、次のようになります。
/[^0-9]*[0-9][^0-9]*[0-9][^0-9]*[0-9][^0-9]*/
一致する場合、文字列には正確に3桁の数字が含まれます。
明示的なFSMを使用するのではなく、正規表現を使用してすべての非数字を取り出し、結果の文字列の長さだけを取得することをお勧めします。または、正規表現を個々の数字に一致させ、一致数をカウントします(ただし、これは効率が低下する可能性があります)。または、それを行う最も簡単な方法(擬似コード):
count = 0
for char in string
if char is a digit
increment count
// For your second part
if count > X
count isn't X; done
if count < X
count isn't X; done
else
count is X; done