在PHP

时间:2017-11-14 17:49:49

标签: 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);

这给了我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 ECHO POWER BLEND X ECHO SM5905EC 6450250 ECHO BAR& CHAIN OIL ECHO SM5818ER 6450114 ECHO电源混合X高性能2冲程发动机ECHO SM5818EG 6450103 ECHO电源混合X ECHO SM5238EC 99988800088 ECHO电源混合X ECHO SM5218EC X6972270201 / 99988800085 ECHO电源混合X ECHO SMGR25EC X6974100202 ECHO电源混合X ECHO SMGR02EC 6450001 ECHO电源混合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 POWERBLEND X ECHO SM5906EC 6450050 ECHO电源混合X ECHO SM5906EM 6450062 ECHO电源混合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电源混合X ECHO SM5955EC 6452750 ECHO电源混合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编号欧盟编号浓度(%)危险说明(参见第16节)加氢处理的轻馏分(石油) 64742-47-8 265-149-8 10-30 H226,H304,H315,溶剂-dewaxed heavy paraffinic馏分 64742-65-0 265-169-7 40-50 H315,H332 Polyiosbutylene 9003-29-6 不适用40-70 H315,H319, H332急救措施

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

1 个答案:

答案 0 :(得分:5)

您需要添加其他连字符:

~\d{2,7}\p{Pd}\d{2}\p{Pd}\d~u

a demo on 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)

<小时/> 在PHP中:

preg_match_all('~\d{2,7}\p{Pd}\d{2}\p{Pd}\d~u', $docText, $matches);