2-(Диметиламино) этанол (2-(Dimethylamino)ethanol): инструкция по применению, противопоказания и состав
我有这个字符串,我想用包含空格的数字和所有符号解析西里尔字母名称,包括可能是2-(Диметиламино)
的空格和拉丁名称(2-(Dimethylamino)ethanol)
但每次名称不同时,
13-цис-Ретиноевая кислота (13-cys-Retinoic acid): инструкция по применению, противопоказания и состав
现在西里尔字母名称为13-цис-Ретиноевая кислота
,拉丁语为(13-cys-Retinoic acid)
我正在用它来解析它:
preg_match ('/[\p{Cyrillic}]+/u', $chemical_text, $matches);
preg_match('/[\p{Latin}]+/u', $chemical_text, $matches);
我不知道的是如何解析那些带有符号-, _, @, (, )
等符号的名称等等
任何想法?
答案 0 :(得分:2)
你可能不需要过多关注这些符号。可以使用
解析此类输入/(.*)\s+\((?=\P{Cyrillic}+:)([^:]*)\)/u
第一个捕获组(.*?)
非贪婪地匹配西里尔文本直到出现空格和分隔符的点;那么正向前瞻(?=\P{Cyrillic}+:)
确保从那一点开始直到下一个双冒号都没有西里尔文本。然后第二个捕获组([^:]*)
贪婪地匹配它可以包含的所有内容,直到用于分隔英文名称的paren-and-double-colon组合。
更新:替代
/(\P{Latin}*)\s+\((\P{Cyrillic}*)\)\P{L}*\s+/u
此正则表达式匹配表单
的文本<cyrillic> <whitespace> (<latin>) [symbols] <whitespace>
其中[symbols]
可以选择显示。也许它更适合某些类型的投入。