PHP Düzenli İfadelerde İleri Bakış

Bazen şu tür bir görevi çözmek gerekir: 'aaa' dizisini bul ve '!' ile değiştir, ancak yalnızca 'aaa' dizisinden sonra 'x' geliyorsa, ve 'x''in kendisi değiştirilmesin. Eğer görevi 'doğrudan' çözmeye çalışırsak, başarılı olamayız:

php<?php
  preg_replace('#aaax#', '!', 'aaax'); // '!' olur, oysa '!x' olmalı
?>

Görevi çözmek için, 'x''in değiştirilmemesi gerektiğini söylemenin bir yolu gerekir. Bu, sadece bakar ama kendisiyle birlikte almaz olan (?= ) özel parantezleri kullanılarak yapılır.

Bu parantezlere pozitif ileri bakış denir. Pozitif - çünkü 'x' (bizim durumumuzda) olmalıdır - ancak o zaman değişiklik gerçekleşir.

Haydi görevimizi çözmek için bu parantezleri kullanalım:

php<?php
  preg_replace('#aaa(?=x)#', '!', 'aaax'); // '!x' döndürür
?>

Ayrıca negatif ileri bakış da vardır - (?! ) - o, tam tersine, bir şeyin olmaması gerektiğini söyler. Aşağıdaki örnekte, değişiklik yalnızca 'aaa' dizisinden sonra 'x' gelmiyorsa gerçekleşir:

php<?php
  preg_replace('#aaa(?!x)#', '!', 'aaab'); // '!b' döndürür
?>
Задание 1

Fonksiyon isimlerini içeren bir dize verilmiştir:

php<?php
  $str = 'func1() func2() func3()';
?>

Dizeden fonksiyon isimlerinin bir dizisini elde edin.

Задание 2

Bir etiket içeren bir dize verilmiştir:

php<?php
  $str = '<a href="" class="eee" id="zzz">';
?>

Bu etiketin öznitelik isimlerinin bir dizisini elde edin.