İlk regex eşleşmeyi atlamak

4 Cevap php

Regex ve php kullanırken ilk eşleşmeyi atlamak için yine de var mı.

Ya da bu kullanma str_replace ulaşılmış bazı yoludur.

Teşekkürler

UPDATE I am trying to remove all the instances of a string from another string but I want to retain the first occurance e.g

$toRemove = 'test';
$string = 'This is a test string to test to removing the word test';

Ouput string would be:

Bu test kelimesini kaldırarak test için bir test dizedir

4 Cevap

Easy PHP yolu:

<?php
    $pattern = "/an/i";
    $text = "banANA";
    preg_match($pattern, $text, $matches, PREG_OFFSET_CAPTURE);
    preg_match($pattern, $text, $matches, 0, $matches[0][1]);
    echo $matches[0];
?>

Sana "AN" verecektir.

UPDATE: bir yerini olduğunu bilmiyordum. Bu deneyin:

<?php
    $toRemove = 'test';
    $string = 'This is a test string to test to removing the word test';
    preg_match("/$toRemove/", $string, $matches, PREG_OFFSET_CAPTURE);
    $newString = preg_replace("/$toRemove/", "", $string);
    $newString = substr_replace($newString, $matches[0][0], $matches[0][1], 0);
    echo $newString;
?>

Ilk maç bulun ve sonra her şeyi silmek nerede o Lütfen ilk nokta oldu ne koymak hatırlıyorum

preg_replace('/((?:^.*?\btest\b)?.*?)\btest\b/', '$1', $string);

Fikir maç ve yakalama neyse precedes her maç, ve tekrar fişe takın için (?:^.*?test)? test ila first örneği neden olur yakalama dahil edilebilir. (Tüm \b s test {[) (6]} veya testify gibi, kısmi kelime eşleşmelerini önlemek için vardır.)

ikinci bir maç ve çekeceği 'falan' senin regex desen, falan (falan) olduğunu varsayalım

Neden bir diziye (preg_match() kullanarak) hiç maçlar yakalamak, ve bundan sonra yapmanız gereken fazla bir şey yok, ikinci (dizi 1), bir saymak daha