2

PHP の正規表現 preg_match() を使用して、中間にハイフンが含まれる場合がある文字列と一致させようとしています。英数字のパターンは一貫しています。3 文字の後に 3 つの数字と 1 文字 (オプション) の最後の文字が続きます。例:

RTE234
RTE-234  

OR

DGF123R
DGF-123R

私のデータベースはダッシュなしで文字列を保存しますが、文字列のデータソースにはダッシュが含まれることがあります。したがって、以前は機能していた私のパターン:

preg_match_all("/\b\(?([a-z0-9-]+)\)?\b/i", $subject, $matches);

調整する必要がありますが、オプションのハイフンを許可するマルチブラケット文字列を形成する方法が正確にはわかりません. 私の最初の試み...

preg_match_all("/\b([a-z]{3}[-]?[a-z0-9-]+)\b/i", $subject, $matches);

ご覧のとおり、最初の 3 文字 [az]{3} について詳しく説明できますが、オプションのダッシュ構文については不明です [-]?

助言がありますか?

4

4 に答える 4

0

次の preg_match が必要です:

preg_match_all('/\b[a-z]{3}-?\d{3}[a-z]?\b/i', $subject, $matches);
于 2013-07-12T08:51:40.030 に答える
0

英数字のパターンは一貫しています。3 つの文字の後に 3 つの数字と 1 つの (オプション) 最後の文字が続きます。

/[a-z]{3}\d{3}[a-z]?/

中間にハイフンが含まれることがある

/([a-z]{3})-?(\d{3}[a-z]?)/

コード内:

if (preg_match('/([a-z]{3})-?(\d{3}[a-z]?)/', $str, $matches)) {
    echo $matches[1] . $matches[2];
}
于 2013-07-12T09:09:34.883 に答える