2

私はsuburb name以下から抽出しようとしています:

12 street name, suburb name, CTG 1234 

正規表現を使用してPHPで。

  • 通りと郊外の名前はどちらも何語でも構いません。
  • CTG は状態の頭字語であり、常に既知であり、常に同じです。
  • その後に 4 桁の郵便番号が続きます。

次の正規表現を思いつきましたが、私が望むものを完全にキャッチできません。

/[\.|,]+\s*(.*?)[\.|,]+*\s*CTG\d{4,4}$/i

どこ:

  • CTG\d{4,4}$左から郵便番号と州を見つけることです。
  • [\.|,]*\s*は、少なくとも 1 つのドットまたはコンマに一致し、その後にゼロまたは多数の空白が続きます。通りと郊外の名前の後に。
  • (.*?)私のターゲットをキャプチャすることです。郊外の名前。
  • *?したがって、貪欲ではありません。

上記は preg_match() で使用され、任意のサブジェクトが一致の配列を返します。

  • arrey[0]= 試合全体
  • arrey[1]=12= 通りの名前、郊外の名前

ただし、http://www.regexplanet.comで試してみると、問題なく動作するようです。

4

3 に答える 3

2

郊外の名前は次の方法で取得できます。

$str = '12 street name, suburb name, CTG 1234';
$pattern = '/[^.,]++(?=[.,]\s*CTG \d{4}$)/';

preg_match($pattern, $str, $result);

echo $result[0];

郊外の名前のみを一致させるには(?=...)、一致を記録せずにチェックのみを実行する先読みアサーションを使用します。

パターンの詳細:

/
[^.,]++            # all that is not a . or a , one or more times (possessive)
(?=                # open lookahead assertion (means "followed by")
    [.,]\s*        # a . or a , with optional white characters
    CTG \d{4}$     # CTG, a space, four digits, end of string
)                  # close the lookahead
/                          
于 2013-10-12T13:10:29.017 に答える
2

^(.*)[\.,]\s+(.*)[\.,]\s+CTG\s+(\d+)$一致するグループ番号を抽出するこれを試してください。2 .

于 2013-10-12T12:59:22.257 に答える
1

CTG と数字の間のスペースを逃したようです (また、ピリオドを括弧内でエスケープする必要はなく、OR パイプも必要ありません)。これはあなたのニーズに合うはずです:

/.*[.,]+\s*(.*)[.,]+\s*CTG\s*\d{4,4}$/i

上記のパターンは、 PHP Live Regexのサンプル テキストで確認できます。

于 2013-10-12T13:07:45.553 に答える