0

415-555-1234
650-555-2345
(416)555-3456
202 555 4567
4035555678
1 416 555 9292

私の正規表現のレッスンでは、上記の番号の市外局番を取得しようとしています。これで、すべての数値に一致する以下の式が得られましたが、最初の括弧のペアは何もキャプチャしていません。

1?\s?\\(?(\d{3})\s?-?\\)?(\d{3})\s?-?(\d{4})

どういうわけかそれらを非キャプチャ グループに変換しましたか? 直し方?

RegexOne.com はちょうど逃げ出し、私はこの 1 つで放っておかれました。

4

2 に答える 2

0

と を使用[(][)]て、バックスラッシュと可能性のある二重のバックスラッシュ (エスケープのため) を回避し、これで問題が解決するかどうかを確認します。

それ以外の場合、正規表現は問題ないように見え(\d{3})、最初の 3 桁を一致させてキャプチャする必要があります。

質問では、使用しているホスト プログラミング言語を示してください。言語に関連するバックスラッシュのエスケープの問題がある場合があります。一般的な経験則は、単一のバックスラッシュ ( Perl \(\dRuby、JavaScript など) または二重のバックスラッシュ ( Java\\(\\dC++ など) を正規表現で一貫して使用することです。

于 2013-09-01T00:51:08.860 に答える
0

この正規表現はhttp://regexone.com/example/1で機能しました

1?\s?\(?(\d{3})\s?-?\)?\d{3}\s?-?\d{4}

それを修正するために私がしたこと。

  1. 括弧をエスケープするときは、二重スラッシュを削除します。
  2. 2 番目と 3 番目のキャプチャ グループを削除します。(これはテストコードを混乱させるように見えました)
于 2013-09-01T02:35:08.463 に答える