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

标签 php string

我有一些格式为

的数据
C222 = 50
C1234P687 = 'some text'
C123YYY = 'text'
C444 = 89
C345 = 3
C122P687 = 'some text'
C122YYY = 'text'
....
....

所以基本上有 3 种不同的形式

  1. “C”数字 = 值,示例 - C444 = 89
  2. “C”号 “P”号 = 值,示例 - C123P687 = '一些文本'
  3. “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”,否则将为空。

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

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

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

关于php - 如何从php中具有可变长度字符的字符串中检索子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2606454/

相关文章:

.net - System.String是一个类类型,但是为什么我们不用New关键字实例化就可以使用它呢?

php - Composer 无法解析为使用 "install"而不是 "update"的可安装包集

php - MySql连接

php - 如何取回 PHP "setrawcookie"值?

java - 返回 Ljava.lang.Object 的字符串值

ios - 如何提取从 Eureka Forms 解析的值?

JAVA 两个相等的字符串返回false

php - 使用 mysql 查询进行分页

php - Zend Framework 2 服务管理器

java - Java将 float 字符串解析为 float 数组?