Parantez ikinci çift (kullanılabilir) kaldırmak için düzenli ifade

2 Cevap php

Ben böyle bir şey var:

$arr[] = 'Seto Hakashima'
$arr[] = 'Anna (segment "Yvan Attal") (as Robin Wright Penn)'
$arr[] = 'Sara (segment "Yvan Attal")'

Ben (ikinci bir çift var sadece) parantez ikinci çift kaldırmak ve bu almak gerekir:

$arr[] = 'Seto Hakashima'
$arr[] = 'Anna (segment "Yvan Attal")'
$arr[] = 'Sara (segment "Yvan Attal")'

Teşekkürler!

2 Cevap

Bu çalışır:

<?php
$arr[] = 'Seto Hakashima';
$arr[] = 'Anna (segment "Yvan Attal") (as Robin Wright Penn)';
$arr[] = 'Sara (segment "Yvan Attal")';
$arr[] = 'Anna (segment "Yvan Attal") (as Robin Wright Penn) BONUS text after second group';

foreach ($arr as $item) {
    print preg_replace('/(\([^\)]*\)[^\(]+)\([^\)]*\)\s*/','$1',$item) . "\n";
}

Çıktı:

Seto Hakashima

Anna (segment "Yvan Attal")

Sara (segment "Yvan Attal")

İkinci grupta sonra Anna (segment "Yvan Attal") BONUS metin

Eğer son örnekte de fark edeceksiniz gibi, bu regex bu parantez sadece ikinci grubu ortadan kaldırır ve inceliğini dize kalan tutar kadar özel olduğunu.

Denemek

preg_replace('/^([^(]+(?:\([^)]+\))?).*/','$1', $item);

Birkaç açıklamalar

^          - start of the string
[^(]+      - match characters before first bracket
\([^)]+\)  - match first bracket
(?: ... )? - optional
.*         - eat the rest
$1         - replace with match string

Ya da sadece son parçayı çıkarmak

preg_replace('/(?<=\))\s*\(.*$/','', $item);

(?<=\))    - if there is ) before pattern
(\s*\(.*$  - remove everything after `(` and also zero or more whitespaces before last bracket.