我正在寻找美国地址(粗略搜索),方法是将regular expression匹配到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|\ \;){1,3}\d{5}/i"
答案 0 :(得分:4)
尝试以下中间比赛:
\s*(?:\S\s*){10,100}
正则表达式:
\s* whitespace (\n, \r, \t, \f, and " ") (0 or more times)
(?: group, but do not capture (between 10 and 100 times)
\S non-whitespace (all but \n, \r, \t, \f, and " ")
\s* whitespace (\n, \r, \t, \f, and " ") (0 or more times)
){10,100} end of grouping
所以你可以从表达式开始......
(\d{2,5}|post office|p[\. ]?o\.?)(\s*(?:\S\s*){10,100})
与您的数据一起实时demo。
答案 1 :(得分:0)
您可以添加锚定前瞻以断言非空白的总数:
^(?=(\s*\S){10,100)\s*$)\d{1,5}.*[A-Z]{2}\s+\d{5}$
前瞻断言有10-100个非空白字符。我还根据你的评论粗略地为实际地址做了一个基本的正则表达式。