php - PHP从字符串中提取特定字符
问题描述
我有下面的字符串
$LINE = TCNU1573105 HDPE HTA108 155 155 000893520918 PAL990 25.2750 MT 28.9750 MT
我想PAL990
从上面的字符串中提取。实际提取 PAL990 字符串或任何具有 PAL 后跟一些数字的字符串,如 PAL222 或 PAL123
我尝试了很多方法,但无法得到结果。我用了,
substr ( $LINE, 77, 3)
但是当不同位置的值我得到错误的值时。
解决方案
您可以使用
$LINE = "TCNU1573105 HDPE HTA108 155 155 000893520918 PAL990 25.2750 MT 28.9750 MT";
if (preg_match('~\bPAL\d+\b~', $LINE, $res)) {
echo $res[0]; // => PAL990
}
细节
\b
- 单词边界PAL
- 一个PAL
子串\d+
- 1+ 位数\b
- 单词边界。
该preg_match
函数将返回第一个匹配项。
请注意,如果您的字符串在连字符/空格之间包含类似的字符串,您将不再能够依赖单词边界,然后使用自定义空格边界,即:
'~(?<!\S)PAL\d+(?!\S)~'
编辑
如果您可能在PAL
和 数字之间有一个可选的空格,您可以使用
preg_replace('~.*\b(PAL)\s?(\d+)\b.*~s', '$1$2', $LINE)
或者,将您需要的字符串与空格匹配,然后将其删除:
if (preg_match('~\bPAL ?\d+\b~', $LINE, $res)) {
echo str_replace(" ", "", $res[0]);
}
请注意,这?
使得前面的模式是可选的(匹配 1 或 0 次)。
推荐阅读
- android-volley - 为什么在加载模型后实例化适配器时需要使用 notifyDataSetChanged()?
- sql-server - 每年计算不同的人,但只计算一次
- android - Microsoft Cognitive Speaker Recognition API - 注册 - 无效音频 400 错误
- c++ - 在 C++ 中打印向量向量的元素时输出错误
- mysql - SQL新手问题 - 尝试设置一个值,其中两列匹配并且另一列具有另一个值
- javascript - 如何修复包依赖项中的漏洞
- asp.net - appsettings.json 没有读取新的 ConnectionString .Net Core 3.1
- java - 带有 ES 7.2.1 的 Spring Data Elasticsearch | 索引时 GeoPoint 映射失败
- batch-file - 仅显示提到的第一种颜色的批处理文件
- amazon-web-services - 使用多个帐户导入现有资源