1
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);

我不知道的是如何解析这些名称与无论符号看起来像-, _, @, (, )等等

有任何想法吗?

4

1 回答 1

2

您可能不需要那么关心符号。这种类型的输入可以用

/(.*)\s+\((?=\P{Cyrillic}+:)([^:]*)\)/u

第一个捕获组(.*?)非贪婪地匹配西里尔文文本,直到出现空格和括号分隔符;然后积极的前瞻(?=\P{Cyrillic}+:)确保从那时起直到下一个双冒号完全没有西里尔文字。然后第二个捕获组([^:]*)贪婪地匹配所有可以匹配的内容,直到分隔英文名称的括号和双冒号的组合。

更新:另一种选择

/(\P{Latin}*)\s+\((\P{Cyrillic}*)\)\P{L}*\s+/u

此正则表达式匹配表单的文本

<cyrillic> <whitespace> (<latin>) [symbols] <whitespace>

where[symbols]可以随意出现。也许它更适合某些类型的输入。

于 2013-10-02T08:16:46.983 回答