Архив

Публикации с меткой ‘regexp’

Регулярные выражения. Удаление последней буквы или цифры в строке.

4 Апрель 2018 2 comments

Используем регулярное выражение с REGEXP_LIKE для удаления последней буквы в строке:

with t as
(           select 'H18.DHSHJ7' as str from dual
 union all  select 'H18.AAA1A' from dual
 union all  select 'H18.AAA10' from dual 
 union all  select 'H18.AAAB4B' from dual  
)
select t.str, regexp_replace(str, '[[:alpha:]]$','')
from t

SQL> 
STR        REGEXP_REPLACE(STR,'[[:ALPHA:]
---------- ------------------------------------------------------------------
H18.DHSHJ7 H18.DHSHJ7
H18.AAA1A  H18.AAA1
H18.AAA10  H18.AAA10
H18.AAAB4B H18.AAAB4

Для удаления последней цифры заменяем [[:alpha:]] на [[:digit:]]

with t as
(           select 'H18.DHSHJ7' as str from dual
 union all  select 'H18.AAA1A' from dual
 union all  select 'H18.AAA10' from dual 
 union all  select 'H18.AAAB4B' from dual  
)
select t.str, regexp_replace(str, '[[:digit:]]$','')
from t

SQL> 
STR        REGEXP_REPLACE(STR,'[[:DIGIT:]
---------- -------------------------------------------------------------------
H18.DHSHJ7 H18.DHSHJ
H18.AAA1A  H18.AAA1A
H18.AAA10  H18.AAA1
H18.AAAB4B H18.AAAB4B

Жадная и ленивая квантификация в регулярных выражениях

16 Август 2011 Нет комментариев

GREEDY AND LAZY IN REGEXP

Квантификация — поиск последовательностей;
Определяет, сколько раз предшествующее выражение может встречаться.

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



Таблица 2: Квантификаторы и операторы повтора

Квантификатор Описание Пример
* Встречается 0 и более раз REGEXP_REPLACE(str, ’11*’, ‘1’)
Результат:
test11 => test1
11123345 => 123345
? Встречается 0 или 1 раз
+ Встречается 1 и более раз REGEXP_LIKE(str,’5+’)
Результат:
test11 => false
11123345 => true
{m} Встречается ровно m раз REGEXP_LIKE(str,’3{2}’)
Результат:
test11 => false
11123345 => true
{m,} Встречается по крайней мере m раз
{m, n} Встречается по крайней мере m раз, но не более n раз


Жадная квантификация — это стремление захватить максимально длинную строку, которая соответствует шаблону.

SQL> with t as (
  2   select '<div><img src="http://apps-oracle.ru/logo2.png" alt=""/></div>' str from dual
  3  )
  4  select regexp_substr(str,'<.*>') as res from t;

RES
--------------------------------------------------------------
<div><img src="http://apps-oracle.ru/logo2.png" alt=""/></div>


Ленивая квантификация — это стремление захватить максимально короткую строку, которая соответствует шаблону. Поддерживается с версии 10gR2.

SQL> with t as (
  2   select '<div><img src="http://apps-oracle.ru/logo2.png" alt=""/></div>' str from dual
  3  )
  4  select regexp_substr(str,'<.*?>') as res from t;

RES
-----
<div>



Жадный Ленивый
* *?
+ +?
{n,} {n,}?