Ben öbekleri arasındaki metni bulmak istiyorsanız ne "RegEx olmalıdır

3 Cevap php

Ben "IF (NEW." ve "!" ibareleri arasındaki metni bulmak istiyorsanız ne RegEx olmalıdır?

Aynı şekilde ben $pattern = '/(?<= IF (NEW.)[^ !]+/'; olarak desen düşünüyorum

Ben onu eşleşen am

$input = $row4['ACTION_STATEMENT'];`/*BEGIN IF (NEW.name != OLD.name) THEN INSERT INTO jos_menuaudit set menuid=OLD.id, oldvalue = OLD.name, newvalue = NEW.name, field = "name"; END IF; IF (NEW.alias != OLD.alias) THEN INSERT INTO jos_menuaudit set menuid=OLD.id, oldvalue = OLD.alias, newvalue = NEW.alias, field = "alias"; END IF; END*/`
preg_match_all($pattern, $input, $captures);

Ne tüm değerler yukarıdaki desen bu desen arasında olmak ile maç hangi saklanacağı bir dizi olarak $ yakalar isterseniz?

3 Cevap

Sen deneyebilirsiniz:

if(preg_match('#IF \(NEW\.([^!]*)!#',$input,$matches)) {
 echo "$matches[1]";
}

veya

if(preg_match('#IF \(NEW\.(.*?)!#',$input,$matches)) {
 echo "$matches[1]";
}

Eğer IF ile arasındaki boşluk bir miktar izin vermek istiyorsanız, (NEW Eğer regex kullanabilirsiniz:

#IF\s*\(NEW\.(.*?)!#

Eğer IF arasında ve en az bir beyaz boşluk izin vermek istiyorsanız (NEW Eğer regex kullanabilirsiniz:

#IF\s+\(NEW\.(.*?)!#

Bu deneyin:

preg_match("/IF \\(NEW\\.\\)(.*?)!/", $input, $captures);

Testi:

$input = "foo bar IF (NEW.) capture this text! fu bah";
preg_match("/IF \\(NEW\\.\\)(.*?)!/", $input, $captures);

print_r($captures);

// ["IF (NEW.) capture this text!", " capture this text"]

Sen şu kalıbı kullanabilirsiniz:

\ S * IF? (New. [\ s \ S] *?!

Eğer Perl kullanıyor musunuz?