カンマ「、」またはセミコロン「;」を除くすべての文字に一致する正規表現は何ですか?


343

特定の定義された文字または文字のセットを除くすべての文字に一致する正規表現を定義することは可能ですか?

基本的に、文字列をコンマ(、)またはセミコロン(;)で分割したかったのです。だから私はそれがコンマまたはセミコロンに出会うまですべてにマッチする正規表現でそれをすることを考えていました。

回答:


471
[^,;]+         

使用している正規表現の実装が指定されていません。それらのほとんどには、Split区切り文字を取り、それらで分割するメソッドがあります。「通常の」(なしの^)文字クラスを使用したい場合があります。

[,;]+

10
また、質問では隣接するセパレータを許可するかどうかは指定されていないため、末尾の「+」は少し疑わしいです。
ジョナサンレフラー

セミコロンの場合のみエラーが発生します
達し

最後にセミコロンとカンマを避けたいという同様の要件がありましたが、何度も試しましたが、以下の成功例では、const regexDomain = / ^(?:[A-Za-z0-9](?: [A-Za-z0-9-] {0,61} [A-Za-z0-9])?\。)+ [A-Za-z0-9] [A-Za-z0-9-] { 0,61} [A-Za-z0-9] / g; まあ、私が使用するかどうかを検証します。間にはありますが、最後にvliadateに失敗します。
ハリー・

86

文字クラスを使用します。キャレットで始まる文字クラスは、クラスにないものと一致します。

[^,;]


最後にセミコロンとカンマを避けたいという同様の要件がありましたが、何度も試しましたが、以下の成功例では、const regexDomain = / ^(?:[A-Za-z0-9](?: [A-Za-z0-9-] {0,61} [A-Za-z0-9])?\。)+ [A-Za-z0-9] [A-Za-z0-9-] { 0,61} [A-Za-z0-9] / g; まあ、私が使用するかどうかを検証します。中間にありますが、最後にvliadateに失敗します。
ハリー・


2

これを使って:

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

5
そのためには、フィールド区切り記号としてではなく、フィールド区切り文字としてコンマまたはセミコロンが必要です。違いは、「行」(または他のスキャンされたレコード構造)の終わりで重要です。通常、最後のフィールドの後にコンマまたはセミコロンを要求することは望ましくありません。正規表現エンジンが十分に強力である場合は、「(?:([^,;]*)(?:[^,;]|$))」(キャプチャしない括弧を使用したPCRE)を使用できます。フィールドの後、またはレコードの終わりのカンマまたはセミコロンの代替手段は、物事をよりよくします。空のフィールドが許可されているかどうかも検討してください。
ジョナサンレフラー、

1
最後に、キャプチャによって実際に返されるものについて心配する必要があります。セパレータを含めたいと思いますか。1行に10個のフィールドがある場合、それらの数はキャプチャ表記によって返されます。
ジョナサンレフラー

1
あなたはそのすべてについて正しいですが、私が私の答えでそれらのことをコンサートに参加しなかった理由は、質問者が尋ねているRegExの言語/ライブラリがわからないためです。彼は「GREP」を使用している可能性があります。とにかく、私は彼のために物事を明確にするためにそれらのコメントを追加していただきありがとうございます。:D
NawaMan 2009
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.