Ihr (?(?=SI)(?<matchfromend>[A-Z]+$)
regex Teil verbraucht keine willkürlichen Zeichen vom Anfang des Strings bis (?<matchfromend>[A-Z]+$
Muster bis zum Ende.
können Sie die folgende regex verwenden:
'~^(?(?=SI).*#¤(?<matchfromend>.+$)$|(?<else>.*))~'
Siehe regex demo
Erklärung:
^
- Beginn der Zeichenfolge
(?(?=SI).*#¤(?<matchfromend>.+$)$|(?<else>.*))
- ein bedingtes:
- Wenn
SI
zu Beginn erscheint ((?=SI)
) Spiel 0+ andere Zeichen als eine neue Zeile zum letzten #¤
auf und erfassen 1+ anderen Zeichen als eine neue Zeile an das Ende der Zeichenfolge in Gruppen up „matchfromend“
- Wenn am Anfang kein
SI
vorhanden ist, passen Sie 0+ Zeichen außer einem Zeilenumbruch bis zum Ende der Zeile an.
Ein weiteres nicht-REGEX Ansatz
prüfen, ob ein String mit SI
beginnt und wenn ja, explodieren mit #¤
und das letzte Element erhalten. Wenn nicht, benutze die ganze Zeichenfolge.
Siehe IDEONE demo:
$str = "SI-#CL#¤1801 BARBER LANE#CL#MILPITAS CA 95035#CL#FONE 1-408-943-0600#CL#FAX 1-408-943-0484#CL#¤CANCEL BY 5 PM - RQST-NO FEATHER"; // => CANCEL BY 5 PM - RQST-NO FEATHER
//$str = "#CL#¤1801 BARBER LANE#CL#MILPITAS CA 95035#CL#FONE 1-408-943-0600#CL#FAX 1-408-943-0484#CL#¤CANCEL BY 5 PM - RQST-NO FEATHER";
$res = $str;
if (strrpos($str, "SI", -strlen($str)) !== false) { // starts with SI
$arr = explode("#¤", $str);
if (!empty($arr)){
$res = array_pop($arr);
}
}
echo $res;
Was Sie versuchen zu passen genau sind? – npinti
Ich möchte ABBRUCH BY 5 PM - RQST-NO FEATHER nur wenn String beginnt von SI- –
Eine andere Idee mit bedingten: ['^ (? (? = SI -). * # ¤) \ K. +'] (https://regex101.com/r/pR7rN6/3) oder [eins ohne] (https://regex101.com/r/pR7rN6/1). –