0

有这个字符串:

Paquete Trend Exterior -alfombrillas, faros antiniebla, llantas de aleación de 15- (300), Paquete Winter -asientos delanteros calefactables, parabrisas térmico- (300), Paquete City -control de aparcamiento trasero, retrovisores plegables eléctricamente- (250)。

我试过这个 reg 表达式:

 /.\*-.\*- \\(.*\\)/

要得到这个:

Array
(
    [0] => Array
        (
            [0] => Paquete Trend Exterior -alfombrillas, faros antiniebla, llantas de aleación de 15- (300)
            [1] => Paquete Winter -asientos delanteros calefactables, parabrisas térmico- (300)
            [2] => Paquete City -control de aparcamiento trasero, retrovisores plegables eléctricamente- (250)
        )    
)

但我有这个:

Array
(
    [0] => Array
        (
            [0] => Paquete Trend Exterior -alfombrillas, faros antiniebla, llantas de aleación de 15- (300), Paquete Winter -asientos delanteros calefactables, parabrisas térmico- (300), Paquete City -control de aparcamiento trasero, retrovisores plegables eléctricamente- (250)
        )
)

如何拆分结果?


额外的

给出的字符串也可能是这样的:

Bola de remolque desmontable (350 euros), control de velocidad -mega, chachi- (150), cristales traseros tintados (120), pintura blanco sólido (150), Paquete Titanium Cuero -llantas de aleación de 17, tapicería de cuero, asientos delanteros calefactables- (600), Paquete Panorámico -techo solar panorámico, cristales tintados- (600).

我也喜欢匹配“Bola de remolque desmontable(350 欧元)”格式。可能吗?

4

5 回答 5

3

问题是*是贪婪的,因此它会匹配尽可能多的字符串。你可以只做*非贪婪的,如*?.

因此:

/.*?-.*?- \(.*?\)/

印刷:

[0] => Paquete Trend Exterior -alfombrillas, faros antiniebla, llantas de aleación de 15- (300)
[1] => , Paquete Winter -asientos delanteros calefactables, parabrisas térmico- (300)
[2] => , Paquete City -control de aparcamiento trasero, retrovisores plegables eléctricamente- (250)

如果您也希望,删除 ,请考虑制作第一个字符\w,如果这足够通用([^, ]而不是\w也可以使用)。

/\w.*?-.*?- \(.*?\)/

印刷:

[0] => Paquete Trend Exterior -alfombrillas, faros antiniebla, llantas de aleación de 15- (300)
[1] => Paquete Winter -asientos delanteros calefactables, parabrisas térmico- (300)
[2] => Paquete City -control de aparcamiento trasero, retrovisores plegables eléctricamente- (250)

对于第二个字符串

您可以-.*?-通过将其括在括号中并在?其后放置一个来使其成为可选(?:只是使其成为非捕获组,因此它也不会输出它,它不会改变匹配)。

/\w.*?(?:-.*?-)? \(.*?\)/

或者你可以做一些更简单的事情,这对两个字符串都有效:

/\w.*?\)/
于 2013-06-07T14:32:53.157 回答
1

你觉得这个怎么样?

/.*?\(\d+\)[,\.]/

http://www.debuggex.com/r/ArLYC3VNceye7z9A

于 2013-06-07T14:30:50.797 回答
1

将您的正则表达式更改为:

/.*?-.*?- \(.*?\)/

*?匹配零次或多次,但与 不同*的是,它匹配的次数越少越好。

在您的版本中,第一个.*匹配所有内容,直到Paquete City.

阅读http://www.regular-expressions.info/repeat.html了解更多信息。

您还可以使用:

/[^-]*-[^-]*- \([^\)]*\)/

更具体地了解可以匹配的内容通常是一个好主意,而不是使用..

于 2013-06-07T14:33:13.877 回答
1

尝试拆分(?<=[(]\d+( euros)?[)]), +

于 2013-06-07T14:34:47.893 回答
0

这里-> http://regexr.com?355dp

正则表达式:/[^, ][^(]*[(][0-9]*[)]/g 模式:[^, ][^(]*[(][0-9]*[)]

于 2013-06-07T14:30:45.343 回答