Получить соответствие с исключенными персонажами - PullRequest
1 голос
/ 25 апреля 2019

У меня есть текст 3571157, 357-11-57, 357 11 57

Я могу поймать эти числа с помощью регулярного выражения \d{3}[-\s]?\d{2}[-\s]?\d{2}

, но я хочу, чтобы мой матч во всех случаях выглядел как 3571157.Возможно ли это?

PS Я имею в виду на уровне регулярных выражений, без дополнительного кода после, чтобы сделать его более понятным в коде /[a-z-]+/.exec('ha-ha')[0] Я хочу вывести haha (совпадение с исключенным - символом)

Ответы [ 2 ]

1 голос
/ 25 апреля 2019

Нет языка программирования с тегами, но если вы получаете совпадения из строки, вы можете заменить все нецифровые символы, используя \D+, на пустую строку, оставляя только цифры.

Пример с использованием Javascript:

let str = "3571157, 357-11-57, 357 11 57";
let pattern = /\d{3}[-\s]?\d{2}[-\s]?\d{2}/g;
console.log(str.match(pattern).map(s => s.replace(/\D+/g, '')));
1 голос
/ 25 апреля 2019

Да, это жизнеспособно.Вы можете сделать это с помощью замены строки на пробел и - , например:

$input = '3571157, 357-11-57,  81749 91741 9080,  81749 91741 9080,  81749 91741 9080  ,357 11 57, 81749 91741 9080';
$split_inputs = preg_split('/,/s', $input);
$output = '';
foreach ($split_inputs as $key => $value) {
    $match = preg_match('/^[0-9 \-]{7,9}$/s', trim($value));
    if (!$match) {continue;}
    $output .= preg_replace('/-|\s/s', '', $value);
    if (sizeof($split_inputs) - 1 - $match != (int) $key) {
        $output .= ", ";
    }
}

var_dump($output);

Выход

 string(25) "3571157, 3571157, 3571157"

Вы можете использовать это RegEx и соответствует вашему вводу первым.

^[0-9\s\-]{7,9}$

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...