我有一些格式为
的数据C222 = 50
C1234P687 = 'some text'
C123YYY = 'text'
C444 = 89
C345 = 3
C122P687 = 'some text'
C122YYY = 'text'
....
....
所以基本上有 3 种不同的形式
- “C”数字 = 值,示例 - C444 = 89
- “C”号 “P”号 = 值,示例 - C123P687 = '一些文本'
- “C”数字“YYY”=值
只有(=)号左边的数字是可变长度的。值各不相同。
我想将数据存储在数据库中
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'
关于如何检索这些数字有什么想法吗?
谢谢
最佳答案
在 PHP 中使用正则表达式。以下正则表达式模式将匹配您提供的所有情况 - 将其与 preg_match_all 一起使用(传入一个数组和 PREG_SET_ORDER
),然后您传入的数组将包含每行数据的一个数组,每行的数组将包含 5 个元素。
(C[\d]+)(P[\d]+)?(YYY)? = (.+)
数组的第一个元素将包含被测试的完整字符串。
数组的第二个元素将包含“C”数字。
数组的第三个元素将包含“P”数字(如果存在),否则为空。
如果存在,数组的第四个元素将包含“YYY”,否则将为空。
数组的第五个元素将包含该值。
为了回应之前的评论,以下正则表达式是上述正则表达式的修改版本,但不会在匹配值中包含 C
和 P
:
C([\d]+)(?:P([\d]+))?(YYY)? = (.+)
关于php - 如何从php中具有可变长度字符的字符串中检索子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2606454/