1

正規表現を 2 ~ 5 桁または一部の私書箱に一致させ、その後に 10 ~ 100 文字を続け、その後に州と郵便番号を続けて、米国の住所を探しています (大まかな検索) 。

私は中間一致を改行を含む任意の文字の 10 から 100 に制限しようとしていますが、具体的には無制限の数の空白文字を許可しています (他のすべての文字は合計 100 に制限されています)。たとえば、次の文字列は一致します。

"12345 First St. [hundreds of white space characters]
 Some Town, [hundreds of white space characters]
 CA 92107"

この正規表現は、無制限のスペースを除いて私のパターンと一致します。

$regex = '/(.|\n|\r\n){10,100}/';

無制限の空白をこのパターンに一致させるためにこれを試しましたが、うまくいきません:

$regex = '/(.|\s+|\n|\r\n){10,100}/';

コンテキストとして、アドレスを探すために使用している完全な正規表現を以下に示します。

$regex = "/\b(\d{2,5}|po|p\.o\.|post office)(.|\n|\r\n){10,100}(AK|Alaska|AL|Alabama|AR|Arkansas|AZ|Arizona|CA|California|CO|Colorado|CT|Connecticut|DC|Washington\sDC|Washington\D\.C\.|DE|Delaware|FL|Florida|GA|Georgia|GU|Guam|HI|Hawaii|IA|Iowa|ID|Idaho|IL|Illinois|IN|Indiana|KS|Kansas|KY|Kentucky|LA|Louisiana|MA|Massachusetts|MD|Maryland|ME|Maine|MI|Michigan|MN|Minnesota|MO|Missouri|MS|Mississippi|MT|Montana|NC|North\sCarolina|ND|North\sDakota|NE|New\sEngland|NH|New\sHampshire|NJ|New\sJersey|NM|New\sMexico|NV|Nevada|NY|New\sYork|OH|Ohio|OK|Oklahoma|OR|Oregon|PA|Pennsylvania|RI|Rhode\sIsland|SC|South\sCarolina|SD|South\sDakota|TN|Tennessee|TX|Texas|UT|Utah|VA|Virginia|VI|Virgin\sIslands|VT|Vermont|WA|Washington|WI|Wisconsin|WV|West\sVirginia|WY|Wyoming)(\s|\n|\r\n|\&nbsp\;){1,3}\d{5}/i"
4

2 に答える 2

0

固定された先読みを追加して、非空白の総数をアサートできます。

^(?=(\s*\S){10,100)\s*$)\d{1,5}.*[A-Z]{2}\s+\d{5}$

先読みは、10 ~ 100 個の非空白文字があることを表明します。また、コメントに基づいて、実際のアドレスの基本的な正規表現を概説しました。

于 2013-09-11T01:54:48.530 に答える