5

注: 検索に正規表現を使用するサードパーティのアプリを使用しています。これは独自のフレーバーがありますが、ほとんどの場合、Java の正規表現のフレーバーのように機能します。もちろん、これは問題ではないかもしれません。

この同じ質問のさまざまな方法 (さまざまな言い回し) を検索した後、チュートリアル、例、または「である」(正の?) と「ではない」(ではない) の両方を使用できるかどうかについての言及さえ見当たりませんでした (負?) 同じ範囲内の定義。

検索されるデータの量が膨大で、すでに収集された一致が台無しになるため、アプリで例をテストして、アイデアが機能するかどうかを確認することはできません。こんな理由でお願いしているだけです。

以下は、うまくいくかもしれないと思ったものの、テスターの動作がおかしくなった例です。

[\w^\s<>.!?]{2}
[\w|^\s<>.!?]{2}

むしろ、最初のものと同じように動作するようにしたいと思います (任意の数字、小文字、大文字、またはスペース、>、<、ピリオド、!、または ? ではないその他の通常の文字)。 or 演算子のみを持つ 2 番目。

私が使用した正規表現テスターは、私を混乱させているさまざまなファンキーな結果をもたらしました。

また、注意してください:私はこれをキャプチャグループ内で使用しており、その後に適切に使用している場合と使用していない場合があるすべてをキャッチする一致が続きます。したがって、私が試みていることを適切に実行する方法を含める方法を含めたい場合は、お気軽に. 私は主に、これが可能であったかどうか、またはそれが不適切な方法であったかどうかに興味があります.

4

3 に答える 3

5

なぜあなたは\wまったく必要なのですか?

[^\s<>.!?]{2}

これは、スペースでも言及した句読点でもないため、すべての英数字と既に一致しています。

一般に、 文字クラスをある程度差し引くことができます。たとえば、数字を除く英数字と一致させるには、次のようにします

[^\W\d]

なぜなら[^\W]は と同じに一致\w\d、否定された文字クラスにあるため、それから差し引かれます。

編集:

一部の正規表現エンジン (XPath、.NET、JGSoft など) では、次のような柔軟な文字クラスの減算が可能です。

[a-z-[e-g]]

、および[a-z]を除くe、範囲内の任意の文字に一致します。しかし、Java にはこの機能がありません。fg

于 2012-10-08T15:31:23.643 に答える
2

もう1つの可能性は、2つの範囲を使用してそれらを組み合わせることです。例えば

([\w]|[^\s<>.!?]){2}

しかし、これはあなたが実際にここで何を表現しようとしているのかという問題を提起します。この例(私が書き直したように)はあまり意味がないからです。

それが言うのは「単語文字、または空白や特定の句読点ではない任意の文字」です。ただし、「空白または特定の句読点」ではない文字のクラスには、すでにすべての単語文字が含まれています。したがって、別の意味を持たない限り、\wは冗長です。

于 2012-10-08T15:36:56.313 に答える
0

あなたの質問から、スペースのない正規表現がニーズに合っているように見えます。次の方法でそれを実現できます。

[\S]{2}
于 2012-10-08T15:33:33.650 に答える