在正则表达式中拆分匹配

时间:2013-06-07 14:22:49

标签: regex split

有这个字符串:

  

Paquete Trend Exterior -alfombrillas,faros antiniebla,llantas de   aleaciónde15-(300),Paquete Winter -asientos delanteros   calefactables,parabrisastérmico-(300),Paquete City -control de   aparcamiento trasero,retrovisoresplegableselé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)
        )
)

我如何分割结果?


EXTRA

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

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).

并且id喜欢匹配“Bola de remolque desmontable(350欧元)”格式。有可能吗?

5 个答案:

答案 0 :(得分: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.*?\)/

答案 1 :(得分:1)

你觉得这个怎么样?

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

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

答案 2 :(得分:1)

将正则表达式更改为:

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

*?匹配零次或多次,但与*不同,它匹配的次数尽可能少。

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

阅读http://www.regular-expressions.info/repeat.html了解详情。

你也可以使用:

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

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

答案 3 :(得分:1)

尝试按(?<=[(]\d+( euros)?[)]), +分割。

答案 4 :(得分:0)

此处 - &gt; http://regexr.com?355dp

RegExp:/[^, ][^(]*[(][0-9]*[)]/g 模式:[^, ][^(]*[(][0-9]*[)]