php - 在 PHP 中使用正则表达式解析 .X12 文件以查找大写字母 'FS' 后跟 13 个数字时出现问题

标签 php regex preg-match x12

我正在尝试使用 PHP 中的正则表达式解析 .X12 文件中的一些数据。该模式是大写字母 FS 后跟 13 个数字字符。

以下是一些文本的示例:PROCURMENT333RFQ3PO100011EAFS8340015381823PKGFSHALL

我需要从其他文件中提取“FS8340015381823”以及 13 个数字字符的其他变体。

这是对我不起作用的代码:

$regex = '/FS[0-9]{13}?/';
preg_match( $regex, $x12, $matches );
var_dump( $matches );

我也尝试过这些正则表达式模式:

$regex = '/FS8340015381823/';
$regex = '/FS\d{13}?/';

如果我在执行 preg_match() 之前将上面的示例字符串存储到 $x12 变量,那么所有这些正则表达式都可以正常工作,但当我加载内容时,它们不适用于原始文件。当我回显 .X12 文件内容到屏幕时,我看到了上面示例中使用的确切字符串。如果我使用正则表达式 /FS/,它会找到“FS”。

此正则表达式适用于原始文件数据,但返回的匹配项不仅仅是“FS”之后的数字字符:

$regex = '/FS.{13}?/';

我的机器上的终端是否未显示奇怪的字符?我在 Amazon EC2 上运行 Linux CentOS。

最佳答案

感谢@HamZa的帮助以及用于分解他的数据的OP。

您可以使用 /FS\x1d[0-9]{13}//FS\x1d\d{13}/

如果数据中有多个十六进制,则可以使用字符类。

/FS[\x00-\x1f]\d{13}/ 

关于php - 在 PHP 中使用正则表达式解析 .X12 文件以查找大写字母 'FS' 后跟 13 个数字时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18243466/

相关文章:

php - 对 URL 进行编码,包括其在 php 中的路径

java - 使用 "*"的字符串拆分题

php preg_match 不像在其他网络应用程序中那样工作

php - 正则表达式 - PHP

php - 在 MySQL 和 Laravel 中预订

php - RHEL8 和 Centos7 httpd - php 处理方式不同

javascript - 为什么ajax无法将数据返回到表td中的元素?

regex - 使用 GNU sed 在插入或附加行中重用匹配的模式

java - 正则表达式在 Ruby 中匹配,但在 Java 中不匹配?

php - 如何从 URL 获取视频 ID? (每日运动)