0

先頭と末尾の文字が異なる識別子を解析する最善の方法を見つけるのに苦労しています。たとえば、識別子の先頭文字は大文字と小文字のみで、識別子の途中には数字とコロンが含まれているとします。識別子の末尾はコロンではなく、アポストロフィである場合があります。

したがって、以下はすべて正当な識別子です。

f, f0, f:', f000:sdfsd:asdf

ただし、次のものはそうではありません。

0, hello:, he'llo

バックトラッキングを処理する最善の方法がわかりません。コロンは途中で問題ありませんが、識別子の最後にいるかどうかを判断するには、先読みが必要です。

編集:

提案をありがとう。正規表現を使用することは実用的なアプローチですが、そうでなければこれを行うためのクリーンで明白な方法がないように見えることに少しがっかりしています。

4

2 に答える 2

1

また、正規表現を使用する必要があると思いますが、別のパターンを思いつきました:

let pattern = regex @"^([a-zA-Z]+[a-zA-Z0-9:]*[a-zA-Z']?)$"

これにより、必要なすべてのマッチが最初のグループに保持されます。オンライン正規表現ツールを使用して、一致/グループ化を検証できます。

于 2014-05-27T20:57:25.177 に答える
1

これは正規表現パーサーで処理できます

let ident = regex @"[A-Za-z][A-Za-z0-9\:]*[A-Za-z0-9\']"

http://www.quanttec.com/fparsec/reference/charparsers.html

于 2014-05-27T17:02:49.757 に答える