0

この文字列から識別子number1とnumber2を取得する方法を知りたいです。

NAME  IDENTIFIER-NUMBER1-NUMBER2

例:

John Doe ABC-3901-11801

IDENTIFIERNUMBER1とNUMBER2を別々に異なる変数に入れたいです。

しかし、問題は、それがどの位置にあるか、またはその後ろに次のような余分なテキストがあるかどうかを常に知ることができないということです:

Blablabla ABC-3901-11801 John Doe Blablabla

多くの場合、異なる数字や文字が存在する可能性があります。

XYZ-46781-28102

誰かがphpでそれらの変数を見つける方法を教えてもらえますか?

前もって感謝します

4

1 に答える 1

1

以下の仮定の下で:

  • 識別子は常に大文字です
  • 識別子は常に3文字で構成されます
  • Number1には数字のみがあり、常にダッシュが前に付きます
  • Number2には数字のみがあり、常にダッシュが前に付きます

この正規表現は機能します->'/([A-Z]{3})-([0-9]*)-([0-9]*)/'

例:

$data = 'Blablabla ABC-3901-11801 John Doe Blablabla';
preg_match_all('/([A-Z]{3})-([0-9]*)-([0-9]*)/', $data, $matches, PREG_PATTERN_ORDER);
var_dump($matches);

これは出力します

array
  0 => 
    array
      0 => string 'ABC-3901-11801' (length=14)
  1 => 
    array
      0 => string 'ABC' (length=3)
  2 => 
    array
      0 => string '3901' (length=4)
  3 => 
    array
      0 => string '11801' (length=5)
  • $matches[1]は常に識別子です
  • $matches[2]は常にnumber1です
  • $matches[3]は常にnumber2です

編集:これは、より一般的な正規表現でもあります:

/([A-Za-z]*)-([0-9]*)-([0-9]*)/

これは、IDENTIFIERに文字(任意の数字、大文字または小文字)のみが含まれていることのみを前提としています。

たとえば、この正規表現はこの場合に機能します

Blablabla abcdef-3901-11801 John Doe Blablabla
于 2012-08-01T10:46:05.863 に答える