1

サーバー ホスト名の長いリストがあり、2 文字の省略形の状態とそれに続く 3 文字の省略形の都市を含むサーバー ホスト名を取得する必要があります。

例えば:

サーバーのホスト名: ohdubgh01sp、nyobg38djek、123ohdub123as、oh2kjd

この正規表現は最初の 3 つをプルする必要がありますが、最後の 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

あなたが求めているのは、正規表現の領域をはるかに超えています。

意味のあるエントリをフィルタリングする際の根本的な問題は、「意味のある」という言葉です。そのようなことはコンピューターには存在しません。コンピューターにとっては、すべてが意味のあるものです (または見方によっては無意味です)。自由にスタイル設定されたエントリのセット (と思われるもの) が与えられた場合、私たちが期待できる最善の方法は、それをより管理しやすいサイズに絞り込んでから、手動でデータを調べて整理することです。 -そうするために必要なレベルの知性と理解。

たとえば、2 文字の州の後に 3 文字の市が続く場合を考えてみましょう。入力リストにはすぐに認識できるパターンがないため (都市が州に従うこと以外)、有効な州ごとに考えられるすべての 5 文字の省略形を指定する以外に、プログラムにリストを整理させるためにできることはほとんどありません。都市の組み合わせでも、すり抜けるジャンクがまだあります。たとえば、有効な州/都市の組み合わせが「arche」の場合、「archer」という名前のサーバー ホストが使用されます。コンピューターにとってはすべてギリシャ語です。

あなたのより差し迫ったニーズに答えるために: すべての州/都市の組み合わせを指定すると、手作業でプルーニングするよりも時間がかかるため、現在の正規表現を使用することをお勧めします。正規表現)、残りは手動で行います。

于 2012-07-23T19:41:29.520 に答える