1

正規表現は次のとおりです。

/\.([^\.]*)/g

しかし、文字列のname.ns1.ns2場合は、 and をキャッチ.ns1します。ns2値 (完全に理にかなっています)。得ns1ns2結果だけでもいいの?たぶん、アサーションを使用していますか?

4

3 に答える 3

2

キャプチャ グループがあり、その値を使用しますが、言語でそれを行います。

JavaScript の例:

var list = "name.ns1.ns2".match(/\.([^.]+)/g);
// list now contains 'ns1' and 'ns2'

後読み (最新の正規表現のほとんどで、JS は除く) を使用できる場合は、次の式を使用できます。

(?<=\.)[^.]+

\KPerl では、次のようにも使用できます。

\.\K[^.]+
于 2012-06-13T16:11:27.437 に答える
1

あなたが何をしようとしているのかは 100% わかりませんが、いくつかのオプションを試してみましょう。

あなたの正規表現:/\.([^\.]*)/g

(注意: .a 文字クラス [..内の前にバックスラッシュは必要ありません。 aはすでに特別な意味を失っている]ためです。).

まず、正規表現との照合は、原則として、「この文字列はこの正規表現と一致するか」というブール型のテストです。文字列のどの部分が正規表現のどの部分と一致したかなどについて取得できる追加情報は、使用している環境に関係なく、正規表現を取り巻く特定の実装に完全に依存しています。したがって、あなたの質問は本質的に実装に依存しています。

ただし、最も一般的なケースでは、一致の試行によって追加のデータが提供されます。ほとんどの場合、正規表現全体に一致する部分文字列を取得します (Perl 5 では、$&変数に表示されます)。Perl5 互換の正規表現では、正規表現の一部を引用符で囲まれていない括弧で囲むと、それらの各セットに一致する部分文字列も追加で取得されます (Perl 5 では、それらは 、 などに配置され$1ます$2)。

したがって、書かれているように、通常、正規表現は 2 つの別々の結果を利用できるようにします: ".ns1"、".ns2" などは一致全体を表し、"ns1"、"ns2" などはサブグループ一致を表します。 . 後者の値を取得するために式を変更する必要はありません。試合結果へのアクセス方法を変更するだけです。

ただし、必要に応じて、正規表現エンジンがそれらをサポートしている場合は、特定の機能を使用して、正規表現全体が必要な部分のみと一致するようにすることができます。そのようなメカニズムの 1 つが後読みです。肯定的な後読みは、後読み式に一致するものの後にのみ一致します。

/(?<\.)([^.]*)/

これは、非ピリオドの任意のシーケンスに一致しますが、ピリオドの後に来る場合のみです。

于 2012-06-13T16:33:54.327 に答える
0

文字列を特定の文字列 (ピリオドなど) の周りの断片に分割できる文字列分割のようなものを使用できますか?

使用している言語は明確ではありませんが、ほぼすべての現代言語が文字列を分割する方法を提供しています。たとえば、次の擬似コード:

string myString = "bill.the.pony";
string[] brokenString = myString.split(".");
于 2012-06-13T16:05:11.073 に答える