A continuación se muestra el método más eficiente (por tiempo de ejecución) para cortar todo después del primer por en una cadena. Si Por no existe, se devuelve la cadena completa. El resultado es en $ sResult.
$sInputString = "Posted On April 6th By Some Dude";
$sControl = "By";
//Get Position Of 'By'
$iPosition = strpos($sInputString, " ".$sControl);
if ($iPosition !== false)
//Cut Off If String Exists
$sResult = substr($sInputString, 0, $iPosition);
else
//Deal With String Not Found
$sResult = $sInputString;
//$sResult = "Posted On April 6th"
Si no quiere estar entre mayúsculas y minúsculas, utilice stripos en lugar de strpos. Si cree que Por pueden existir más de una vez y desea cortar todo después de la última ocurrencia, use strrpos.
A continuación se muestra un método menos eficiente, pero ocupa menos espacio en el código. Este método también es más flexible y le permite hacer cualquier expresión regular.
$sInputString = "Posted On April 6th By Some Dude";
$pControl = "By";
$sResult = preg_replace("' ".$pControl.".*'s", '', $sInputString);
//$sResult = "Posted On April 6th"
Por ejemplo, si desea eliminar todo después del día:
$sInputString = "Posted On April 6th By Some Dude";
$pControl = "[0-9]{1,2}[a-z]{2}"; //1 or 2 numbers followed by 2 lowercase letters.
$sResult = preg_replace("' ".$pControl.".*'s", '', $sInputString);
//$sResult = "Posted On April"
Para el caso insensible, añadir el modificador i como esto:
$sResult = preg_replace("' ".$pControl.".*'si", '', $sInputString);
para tener todo más allá de la último Por si cree que puede haber más de uno, agregue un extra.* Al principio de esta manera:
$sResult = preg_replace("'.* ".$pControl.".*'si", '', $sInputString);
Pero aquí es también una manera muy poderosa que puede utilizar preg_match para hacer lo que puede estar tratando de hacer:
$sInputString = "Posted On April 6th By Some Dude";
$pPattern = "'Posted On (.*?) By (.*?)'s";
if (preg_match($pPattern, $sInputString, $aMatch)) {
//Deal With Match
//$aMatch[1] = "April 6th"
//$aMatch[2] = "Some Dude"
} else {
//No Match Found
}
Las expresiones regulares pueden parecer confuso al principio ¡pero pueden ser realmente poderosos y tu mejor amigo una vez que los domines! ¡Buena suerte!
¿Qué sucede si la cadena secundaria ocurre dos veces (o más)? –
Como nota, si está haciendo esto para poder tomar el contenido de otra persona y presentarlo en su propio sitio, ** no **. – ceejayoz
Estoy de acuerdo con ceejayoz. Esto se parece mucho a que está intentando usar contenido al que no tiene acceso realmente y está tratando de eliminar cualquier referencia al autor original. Eso no sería muy bueno ... – selfawaresoup