PHP и Regex, если слово найдено - PullRequest
1 голос
/ 11 апреля 2011

Я хочу выполнять полосу символов только в том случае, если в строке найдено определенное слово, поэтому, если номера слов совпадают с регулярным выражением, будет выполнено удаление всех действительных чисел 0-9 или прег, заменив их на нольКстати, цифры всегда будут заключены в "".Каков наилучший способ соединить эти две функции?Примером может быть, если данные были Man, Числа это весело!"123ABC" вернул бы человека, номера веселые!«ABC» Если числа отсутствуют, они игнорируются.

Ответы [ 5 ]

2 голосов
/ 12 апреля 2011

Я чувствую, что некоторые ответы здесь слишком сложны.Может быть, это только я, но это должно быть все, что вам нужно:

if (stripos($str, 'numbers') !== false) {
    $str = preg_replace('/\d/', '', $str);
}

РЕДАКТИРОВАТЬ: Если вы хотите только цифры, которые находятся внутри кавычек, вы можете сделать это срегулярное выражение, но я бы определенно сделал это следующим образом:

if (stripos($str, 'numbers') !== false) {
    $arr = explode('"', $str);

    for ($i = 1; $i < count($arr); $i += 2) {
        $arr[$i] = preg_replace('/\d/', '', $arr[$i]);
    }

    $str = implode('"', $arr);
}
1 голос
/ 11 апреля 2011

Если я правильно понял вопрос, может быть что-то вроде:

if (strpos($string, "numbers") !== false) {
    $string = preg_replace('/"\d+"/', '', $string);
}
0 голосов
/ 12 апреля 2011

Нечто подобное должно работать для вас:

$str = 'Man, Numbers are fun! "123ABC"';
var_dump(preg_replace_callback("(.*\bNumbers\b.*)",
create_function(
'$matches',
'return preg_replace("/(\"[^\d]*)\d+(.*\")/", "$1$2", $matches[0]);'
),
$str));

OUTPUT:
string(27) "Man, Numbers are fun! "ABC""

\ bNumbers \ b обязательно сопоставит слово Numbers с границами слова, чтобы xyzNumbers и Numbersxyz были НЕ соответствует.

0 голосов
/ 12 апреля 2011

@ Райан Купер: Попробуйте -

$input = 'Man, Numbers are fun! "123ABC"';

echo stripnums("Numbers", $input);

function stripnums($needle, $haystack)
{
    if (stripos($haystack, $needle) !== 0)
    {
        return preg_replace('/[0-9]/', '', $haystack);
    }
}
0 голосов
/ 11 апреля 2011

Вы можете использовать функцию strpos, чтобы проверить строку в первую очередь.

Что-то вроде

if(strpos($mystr,"Some value")!==false) { /*preg_replace here.*/ }

...