捕获可选组正则表达式 Php

Capturing optional groups regex expressions Php

我几乎有了完整的正则表达式,但是,有一种情况我无法匹配。

我需要捕获:xxxx 字(如果存在)、小数 (30) 和 'cm'。

我有这样的表达:

30x30cm

30 x 30 厘米

30x30 厘米

xxxx 30x30cm

xxxx (30x30cm) -> 那个案例不匹配单词xxxx(如果存在我需要捕获)

xxxx (30 x 30 cm)->那个盒子不匹配单词xxxx(如果存在我需要捕获)

这就是我现在的正则表达式:

(?:(\w+))?\s?\b(\d+)\s?x\s?(\d+)\s?(cm)\b

如果xxxx存在的话,如何匹配?任何帮助将不胜感激

[https://regex101.com/r/morihH/1][1]

您可以向第一个可选的非捕获组添加可选的白色space和一个(

(?:(\w+)\s*\(?)?\b(\d+)\s?x\s?(\d+)\s?(cm)\b
        ^^^^^^

请参阅 regex demo\s 替换为 space,因为输入字符串是多行字符串)。

\s*\(? 匹配 0+ 白色 space 后跟一个可选的 (.