1

我有一长串服务器主机名,我需要提取包含两个字母缩写状态后跟三个字母缩写城市的服务器主机名。

例如:

服务器主机名:ohdubgh01sp、nyobg38djek、123ohdub123as、oh2kjd

这个正则表达式应该提取前 3 个而不是最后一个。

我试过的:

$pattern = "/.*(al|ak|az|ar|ca|co|ct|de|fl|ga|hi|id|il|in|ia|ks|ky|la|me|md|ma|mi|mn|ms|mo|mt|ne|nv|nh|nj|nm|ny|nc|nd|oh|ok|or|pa|pr|ri|sc|sd|tn|tx|ut|vt|vi|va|wa|wv|wi|wy)([a-z]{3}).*/";

这会将我的列表减半,但仍会检索“barker”等项目。什么是可以给我最准确结果的好的正则表达式?谢谢

4

1 回答 1

1

您所要求的远远超出了正则表达式的范围。

过滤任何有意义的条目的基本问题是“有意义”这个词。对于计算机来说,这样的事情是不存在的——一切对他们来说都是有意义的(或无意义的,取决于你如何看待它)。给定(看起来是)一组自由样式的条目,我们能做的最好的事情就是将其缩小到更易于管理的大小,然后手动检查和修剪数据,因为普通程序根本没有人类这样做所必需的水平的智力和理解力。

以你的情况为例:你想找到一个两个字母的州,然后是一个三个字母的城市。因为您的输入列表没有直接可识别的模式(除了城市跟随州),除了为每个有效州指定每个可能的五个字母缩写/城市组合,即使那样,仍然会有垃圾通过。例如,如果有效的州/城市组合是“arche”,那么名为“archer”的服务器主机将通过。这对计算机来说都是希腊语。

为了满足您更紧迫的需求:由于指定每个州/城市组合将花费您比手动修剪更长的时间,因此我建议您仅使用当前的正则表达式,尽量确定服务器主机共享的任何其他模式(并将它们应用于正则表达式),然后手动完成其余的工作。

于 2012-07-23T19:41:29.520 回答