2009-09-11 11 views
211

特定の文字または文字セット以外のすべての文字と一致する正規表現を定義することはできますか?カンマ '、'またはセミコロン ';'以外のすべての文字に一致する正規表現は何ですか?

基本的には、文字列をカンマ(、)またはセミコロン(;)で区切りたいと思っていました。だから、コンマまたはセミコロンに遭遇するまで、すべてにマッチする正規表現でそれをやろうと考えていました。

答えて

291
[^,;]+   

使用している正規表現の実装を指定していません。それらのほとんどはSplitメソッドを持ち、デリミタを使用して分割します。

[,;]+ 
+6

そして質問は、隣接するセパレータを許可するかどうかを指定していないので、末尾の '+' 少し疑わしいです。 –

+0

セミコロンのみのエラーを取得する - 末尾にある正規表現がファイルの末尾に達する – Jaswinder

54

使用文字クラス:あなたは(^なし)「通常」の文字クラスと1つを使用する場合があります。キャレットで始まる文字クラスは、クラスにない文字クラスと一致します。

[^,;] 
+1

[否定文字クラス]の詳細(http://www.regular-expressions.info/charclass.html) – HEX

2

使用この:

([^,;]*[,;])* 
+4

コンマまたはセミコロンをフィールド区切り文字ではなく、フィールド区切り文字です。違いは、「行」(または他のスキャンされたレコード構造)の終わりにあります。通常、最後のフィールドの後にカンマまたはセミコロンを置くことは望ましくありません。あなたの正規表現エンジンが十分に強力であれば、 ''(?:([^ ,;] *)(?:[^ ,;] | $)) ''(非キャプチャ括弧付きのPCRE)を使うことができます。フィールドの後のカンマまたはセミコロンの選択肢、またはレコードの終わりは、状況を改善します。空のフィールドが許可されているかどうかも考慮してください。 –

+1

最後に、キャプチャによって実際に返されるものについて心配する必要があります。セパレータが本当に必要かどうか、そして行に10個のフィールドがある場合は、キャプチャ表記によって返されるフィールドの数がいくつかあります。 –

+1

あなたはそういうことについては正しかったが、私が答えていることをコンサートしなかったのは、質問者が質問しているRegExのどの言語/ライブラリがわからないということだ。彼は "GREP"を使用している可能性があります。とにかく、私は彼のために物事をクリアするためにそれらのコメントを追加していただきありがとうございます。 :D – NawaMan

関連する問題