2016-08-19 1 views
-3

У меня есть регулярное выражение /[A-Za-z./-]+, а текст, который я хочу проверить, - ABCD123. После того, как текст не пройдет регулярное выражение, я хочу отобразить символы, которые вообще не содержатся в регулярном выражении. Поэтому в этом случае я хочу отобразить 123 или (1,2,3). Как я могу это сделать ?Получить все не соответствующие символы из регулярного выражения

Вопрос для java.

LE: код принимает общие регулярные выражения и общие тексты, поэтому он должен быть общим решением.

+1

Какой язык вы используете? Скорее просто все, что не письмо. Затем у вас есть 123 (или 1,2,3) –

+0

. Код принимает общие регулярные выражения и общие тексты, поэтому он должен быть общим решением. –

+0

Существуют различные варианты регулярных выражений: '([^ a-zA-Z] {1,})' будет работать над bigquery. –

ответ

1

Вам нужно просто свести на нет ваше регулярное выражение: /([A-Za-z.\/-]+)|([^A-Za-z.\/-]+)/g

Вторая группа записи является группа, которая будет иметь элементы, которые не удовлетворяют заданному условию.

Example

+0

Правосторонняя чередование FYI может стать короче '(.)' – revo

+0

Вы не указали первый /. Почему нет ? Кроме того, выражение может быть общим, и я получаю его как параметр. –

+0

Если ваше регулярное выражение имеет обязательное значение с использованием косой черты в самом начале, тогда ваша строка ввода 'ABCD123' никогда не будет соответствовать, и ожидаемый результат должен быть A, B, C, D, 1,2,3 и не только 1,2,3 , Вы должны прояснить эту проблему. @VisanCosmin – revo

0

Включить чередование, которое захватывает все другие символы:

[A-Za-z.\/-]+|(.) 

Таким образом, если левая сторона чередования не соответствует всей входной строке, то первой захват группы имеет несколько значений в нем.

Live demo

1

Вы также можете сначала проверить, что регулярное выражение проход, когда нет - удалить символы другим регулярным выражением, и тогда вы будете иметь только то, что не прошли символы.

псевдокод:

if string is not '[A-Za-z./-]+' then 
    wrong_chars = string.remove('[A-Za-z./-]+') 
+0

Можете ли вы удалить из строковых символов, заданных регулярным выражением? Потому что, если это так, то это решение. –

+0

Первый результат из Google: http://stackoverflow.com/questions/11796985/java-regular-expression-to-remove-all-non-alphanumeric-characters-except-spaces –

+0

Регулярное выражение может начинаться, например, с "/ ", а затем разрешить букву. Как удалить только буквы? Регулярное выражение не имеет никакого метода «regex.contains (« A »)», так как я могу elminiate A из ABC, если регулярное выражение «/ [A]»? –

1
([^a-zA-Z]{1,}) 

будет соответствовать вашему шаблону.

Смежные вопросы