Регулярные выражения в PHP - PullRequest
1 голос
/ 25 августа 2011

Я все еще новичок в использовании регулярных выражений. Я пытаюсь настроить регулярное выражение, где «0» никогда не будет совпадать, если оно само по себе. У меня есть 5 тестовых выражений. Последние 4 должны совпадать, а первая - нет. Тем не менее, я могу показаться, что только середина совпадает. Как я могу установить его так, чтобы он совпадал с последним?

<?php
$data1='0';
$data2='New Triggered By Test 01';
$data3='Hello';
$data4='01 Test';
$data5='00';

$pattern='/[^0]{1}/';

echo preg_match($pattern,$data1);

echo preg_match($pattern,$data2);

echo preg_match($pattern,$data3);

echo preg_match($pattern,$data4);

echo preg_match($pattern,$data5)
?>

Ответы [ 3 ]

2 голосов
/ 25 августа 2011

То, что вы хотите сопоставить это

  • Один символ, который не 0
  • Или более одного символа

Попробуйте это:

"#^([^0]|.{2,})$#"

Комментарии:

"/^      # begining of the input string
(
  [^0]   # one char, everything but zero
  |.{2,} # or any sequence of more than one char
)$/"

Тестовый скрипт:

$inputs = array(
    '0',
    'New Triggered By Test 01',
    'Hello',
    '01 Test',
    '00',
);

foreach($inputs as $input) {
    echo "$input: ";

    if (preg_match("#^([^0]|.{2,})$#", $input)) {
        echo "OK\n";
    } else {
        echo "NOT OK\n";
    }
}
1 голос
/ 25 августа 2011
$pattern='/^(0.+|[^0]).*$/';

Либо ноль, затем еще один символ, либо строка, которая не начинается с нуля.

Живое доказательство концепции на IDEONE: http://ideone.com/2RXrr

1 голос
/ 25 августа 2011

Давайте будем проще:

$data !== '0';
...