在PHP中提取与CAS编号的模式匹配的所有字符串值

CWe*_*off 3 php regex

好的,所以我一直致力于从上传的SDS文件中提取CAS编号(在转到pdf之前使用docx).我已成功将docx转换为页面中的字符串,但如果存在,我需要提取几个字符串.这是我正在使用的代码,我认为我根本没用preg_match_all.

$docObj = new DocxConversion($_FILES["sdsFile"]["tmp_name"]);
$docText = $docObj->convertToText();
preg_match_all("/[0-9]{2,7}-[0-9]{2}-[0-9]{1}/", $docText, $matches);
print_r($matches);
Run Code Online (Sandbox Code Playgroud)

这给了我Array ( [0] => Array ( ) ).我正在寻找时不是很有帮助:

  • 64742-47-8
  • 64742-65-0
  • 9003-29-6

输出$docText是:

识别产品标识用于标签:成品产品编号客户产品编号标签描述实际品牌SM5802EE ECHO POWERBLEND X延长寿命油ECHO SMGR33EC 6450005 ECHO电源混合X ECHO SMGR01EC 6450025 ECHO电源混合X ECHO SMGR07EC 6450002 ECHO电源混合X ECHO SM5101EC X6972270101/99988800086回波功率BLEND X ECHO SM5905EC 6450250 ECHO BAR&链条油ECHO SM5818ER 6450114回声功率BLEND X HIGH PERFORMANCE 2冲程发动机ECHO SM5818EG 6450103回声功率BLEND X ECHO SM5238EC 99988800088回声功率BLEND X ECHO SM5218EC X6972270201/99988800085回声功率BLEND X ECHO SMGR25EC X6974100202 ECHO POWER BLEND X ECHO SMGR02EC 6450001 ECHO POWER BLEND X ECHO SMGR29EC 6450000 ECHO POWERBLEND X ECHO SM5818EE 6450102 ECHO电源混合X低烟ECHO SM5818EC 6450100/6450099 ECHO电源混合X ECHO SM5818EM 6450060 ECHO电源混合X ECHO SMGR34EE ECHO电源X ECHO SM5906EC 6450050 ECHO POWER BLEND X ECHO SM5906EM 6450062 ECHO POWER BLEND X ECHO SM5943EE 6450116 ECHO POWER BLEND X ECHO SMGR33EK 6450118 ECHO POWERBLEND X ECHO SMGR34ER 6450109 ECHO POWER BLEND X ECHO SM5926EC 6450006 ECHO POWERBLEND X XTENDED LIFE OIL ECHO SMGR34EE ECHO POWER BLEND X ECHO SMGR34EC 6450108 ECHO POWER BLEND X ECHO SMGR12EC 99988800089 ECHO POWER BLEND X ECHO SMGR34EK 6450119 ECHO POWERBLEND X ECHO SM5834EM 6450061 ECHO POWER BLEND X ECHO成品产品编号客户产品编号标签说明实际品牌SMGR34EG 6450115 ECHO POWER BLEND X ECHO SM5955EC 6452750 ECHO POWER BLEND X ECHO建议使用化学品和限制使用; 石油润滑油没有其他使用化学制造商,进口商或其他责任方的推荐名称,地址和电话号码:1.3.1.Spectrum Lubricants Corporation 500 Industrial Park Drive Selmer,TN 38375-3276美利坚合众国产品信息MSDS要求:(800)264-6457或+17316454972技术信息:(800)264-6457或+17316454972一般信息:vswedley @ spectrumcorporation.令人满意的电话号码:1.4.1.紧急响应北美:美国中部标准时间下午5:00后的CHEMTREC(800)424-9300或+17035273887美国卫生部紧急情况:(800)264-6457或+17316454972危险(S)鉴定化学品按照(d)段的规定进行分类§1910.1200:急性吸入类别4眼睛刺激物类别2皮肤腐蚀/刺激类别2易燃液体类别4信号词:警告符号:危险说明:吸入有害造成严重眼刺激引起皮肤刺激可燃液体防范说明:预防:避免吸入雾气或喷雾.只能在室外或通风良好的地方使用.戴防护眼镜/戴防护手套戴防护手套远离热源,高温表面,火花,明火和其他火源.禁止抽烟.反应:吸入:将患者转移到空气新鲜处,保持呼吸舒适.如果在眼睛中:用水小心冲洗几分钟.取下隐形眼镜(如果有)并且易于操作.继续冲洗.如果眼睛刺激持续,请咨询医生.如果在皮肤上:用大量清水冲洗,如果出现刺激或皮疹,请就医.脱掉污染的衣服并在重新使用前清洗.如果您感觉不适,请致电毒物中心/医生.如果发生火灾:使用水雾,泡沫,干化学品或二氧化碳(CO2)来扑灭火焰.储存:储存在通风良好的地方.处置:按照当地/地区/国家/国际法规处置内容物/容器.成分/组成信息根据§1910.12003.1.1(d)段分类为健康危害的所有成分的化学名称和浓度(精确百分比)或浓度范围.组分CAS编号EU编号浓度(%)危险说明(参见第16节)馏分(石油),加氢处理光64742-47-8 265-149-8 10-30 H226,H304,H315,溶剂脱蜡重质链烷烃馏分64742- 65-0 265-169-7 40-50 H315,H332 Polyiosbutylene 9003-29-6不适用40-70 H315,H319,H332急救措施

还有更多,但我会饶你...

Jan*_*Jan 5

您需要添加其他连字符:

~\d{2,7}\p{Pd}\d{2}\p{Pd}\d~u
Run Code Online (Sandbox Code Playgroud)

请参阅regex101.com上的演示.


细分:

~        # pattern delimiter
\d{2,7}  # digits, 2-7 times
\p{Pd}   # matches any kind of hyphen or dash (including unicode characters)
\d{2}    # 2 digits
\p{Pd}   # same as above
\d       # one digit
~        # pattern delimiter
u        # unicode flag (pattern modifier)
Run Code Online (Sandbox Code Playgroud)


在PHP中:

preg_match_all('~\d{2,7}\p{Pd}\d{2}\p{Pd}\d~u', $docText, $matches);
Run Code Online (Sandbox Code Playgroud)