2016-05-25 1 views
1

にマッチ:string.IndexOfは正確な私は、次のしている

string text = "Select [id] AS [FROMId] FROM [TASK] ORDER BY id" 

と私はから始まる見つけるためにtext.IndexOf("FROM")を使用したいです。

FROMIdの位置ではなくFROMの位置を探したいと思います。

LastIndexOfまたはFirstIndexOf正解は、テキストが、私は正確なマッチングを行うためのIndexOfメソッドを必要とする

string text = @"Select [id] AS [FROMId], 
       newId as [newFROMId] FROM [TASK] ORDER BY [FROMId]" 

のようなものかもしれない原因ではありません。

アイデア?

+0

Regexを[単語境界 '\ b'チェック](http://www.regular-expressions.info/wordboundaries.html)と併用する方法はありますか?例えばのように。 '" \ bFROM \ b "'をパターンとして使用します。 –

+1

@UweKeim、私は、すべてのエッジケースが適切なパーサで最もうまくいくと考えています。単語の境界でさえ、ユニットから 'select'されたデータを得るのに役立たない|ユニットはdtableからです。 – paxdiablo

答えて

-1

あなたは「」(スペース)を持っているので、それは

int index = text.IndexOf("FROM ") - 1 

-1のように見えるので、あなただけのスペースを追加した場合。 FROM以来

+1

この場合は、* 1 *を引くべきではありません。 – paxdiablo

1

は、一般的にどちらかの側にスペースを持つことになりますSQLの予約語であることが前にごFをスペースのアドレスを与えることになるので、あなたは、そのために見ることができる、の位置を取得するために1を追加F自体:

int index = text.IndexOf(" FROM ") + 1 

これは必ずしも(a)はのすべてエッジケースを世話をしていないかもしれないが、適切にそれを行うために、あなたは正しく見つけることができることを確認するためにSQLパーサーを実装する必要がありリアルfromキーワードを抽出し、他の可能性と区別します。その上

select [a]FROM[tble] ... 
select 'got data from unit #' | unit from tbl ... 

と:このようなものとして


(a)の

+0

本当ですか? '\ t'、' \ r'、 '\ n'はどうですか? –

+0

また、SELECT * FROM [MyTable]はSQL Serverでも動作します。 –

+0

@Uwe Keim詳細をお知らせください。 paxdiabloとMurfの回答はうまくいきましたが、ちょっとハッキリです。 –

関連する問題