14

重複の可能性:
電話番号検証用の包括的な正規表現
grep with regex for phone number

こんにちは、みんな、

私は Stackoverflow を初めて使用するので、簡単な質問があります。多数の HTML ファイル (理論的には無限大) が与えられたとします。正規表現を使用して、これらすべてのファイルから電話番号のリストを抽出するにはどうすればよいですか?

説明・表現よろしくお願いします。電話番号は、次のいずれかの形式にすることができます。

  • (123) 456 7899
  • (123).456.7899
  • (123)-456-7899
  • 123-456-7899
  • 123 456 7899
  • 1234567899

ご協力ありがとうございました。良いものを!

4

4 に答える 4

7

/^[\.-)( ]*([0-9]{3})[\.-)( ]*([0-9]{3})[\.-)( ]*([0-9]{4})$/

あなたがしようとしていることを達成する必要があります。

最初の部分^は、文字列全体を強制する「行の開始」を意味します。

[\.-)( ]*私がそこに持っている は、「任意のピリオド、ハイフン、括弧、またはスペースが 0 回以上出現する」ことを意味します。

クラスターは 3 つの数字の([0-9]{3})グループに一致します (最後の数字は 4 に一致するように設定されています)

それが役立つことを願っています!

于 2010-05-16T02:03:30.290 に答える
3

使用している言語がわからないと、構文が正しいかどうかわかりません。

これは、誤検知がほとんどないすべてのグループと一致する必要があります。

/\(?([0-9]{3})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/

試合後に関心のあるグループは、グループ1、3、および4です。グループ2は、最初と2番目の区切り文字、、、またはが同じであることを確認するためにのみ存在.ます-

たとえば、文字を削除して電話番号を123456789の形式のままにするsedコマンド:

sed "s/(\{0,1\}\([0-9]\{3\}\))\{0,1\}\([ .-]\{0,1\}\)\([0-9]\{3\}\)\2\([0-9]\{4\}\)/\1\3\4/"

これが私の表現の誤検知です:

  • (123)456789
  • (123456789
  • (123 456 789
  • (123.456.789
  • (123-456-789
  • 123)456789
  • 123)456 789
  • 123).456.789
  • 123)-456-789

式を2つの部分に分割します。1つは括弧と一致し、もう1つは最初の部分を除いて、これらの誤検知をすべて排除しません。

/\(([0-9]{3})\)([ .-]?)([0-9]{3})\2([0-9]{4})|([0-9]{3})([ .-]?)([0-9]{3})\5([0-9]{4})/

この場合、グループ1、3、および4または5、7、および8が重要になります。

于 2010-05-16T02:35:01.583 に答える
1

これは、括弧内に市外局番があるものをキャッチするのに役立ちます

([0-9]\{3\})[ .-][0-9]\{3\}[ .-][0-9]\{4\}

その他は次のとおりです。

[0-9]\{3\}[ -][0-9]\{3\}[ -][0-9]\{4\}
[0-9]\{10\}

最初のものと2番目のものを分けたのは、後戻りせずにそれらをまとめると、受け入れ(123 456 7890たり、123) 456 7890

を使用している端末では、繰り返しgrepのために をエスケープする必要があることにも注意してください。{ }これを使用する場所によっては、他の文字をエスケープする必要がない場合や、エスケープする必要がある場合があります。

于 2010-05-16T02:17:16.483 に答える
1

^(\(?\d{3}\)?)([ .-])(\d{3})([ .-])(\d{4})$

これは、最後のパターンを除くすべてに一致する必要があります。最後のものについては、分離されたパターンを使用できます^\d{10}$

そしてエラーがあります、それは一致します(123 456 7899

  1. ^(\(?\d{3}\)?)、このコードを破ると、最初の文字 ( ^) がテキストの先頭に一致します。\(?この文字を\)?受け入れるかどうか、最初の文字があるかどうかを確認する必要があるという問題があります。2番目の文字が一致する必要がある場合は、正規表現のみを使用して可能かどうかわかりません そして、\d{3}3つの数字に一致します

  2. ([ .-])それらのいずれにも一致しますが、1 回だけです。

  3. (\d{3})3つの数字に一致します

  4. 2と同じ

  5. (\d{4})$4 つの数字の後にテキストの終わりが続く ( $)

HTML ページから抽出する必要があるため、テキストの任意の部分を無視^$て一致させglobal、javascript /exp/ でフラグを設定する必要があります。g

ここで正規表現をテストできます

于 2010-05-16T02:17:52.707 に答える