如何从php中具有可变长度字符的字符串中检索子字符串?

use*_*580 3 php string

我有一些格式的数据

C222 = 50
C1234P687 = 'some text'
C123YYY = 'text'
C444 = 89
C345 = 3
C122P687 = 'some text'
C122YYY = 'text'
....
....
Run Code Online (Sandbox Code Playgroud)

基本上有3种不同的形式

  1. "C"数=值,例如 - C444 = 89
  2. "C"数字"P"数字=值,示例 - C123P687 ='some text'
  3. "C"数字"YYY"=值

只有数字在(=)符号的左侧具有可变长度.价值各不相同

我想将数据存储在db中

INSERT INTO datatable 
    c_id = "number after C"
    p_id = "number after P" // if it exists for a line of data
    value = 'value'
    yyy = 'value'
Run Code Online (Sandbox Code Playgroud)

有任何想法如何检索这些数字?

谢谢

And*_*lam 5

在PHP中使用正则表达式.以下正则表达式模式将匹配您提供的所有情况 - 将其与preg_match_all一起使用(传入数组PREG_SET_ORDER),然后传入的数组将包含每行数据的数组,每行的数组将包含5个元素.

(C[\d]+)(P[\d]+)?(YYY)? = (.+)
Run Code Online (Sandbox Code Playgroud)

数组的第一个元素将包含已测试的完整字符串.

数组的第二个元素将包含"C"数字.

如果存在,则数组的第三个元素将包含"P"数字,否则它将为空白.

如果存在,数组的第四个元素将包含"YYY",否则它将为空白.

数组的第五个元素将包含该值.

在回应之前的评论时,以下正则表达式是上述的修改版本,但不包括匹配值中的CP:

C([\d]+)(?:P([\d]+))?(YYY)? = (.+)