sql >> Databasteknik >  >> RDS >> Oracle

Vad är skillnaden mellan (*) och .* i regexp?

Det verkar som om * i Oracle 11 och + mönster (med ingenting före dem) genererar nollbreddsmatchningar. Alltså (*) och (+) fångar grupper () som innehåller nollbreddsmönstren * eller + respektive.

Alla dessa frågor returnerar en rad:

SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '*' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '(*)' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '^*' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '^(*)' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '*1' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '+' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '(+)' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '^+' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '^(+)' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '+1' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '^+1' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '+1$' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '^+1$' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '()' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '12', '1(*)2' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '12', '1(+)2' );

Dessa frågor returnerar inga rader:

SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '*2' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '^*$' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '^+$' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '12', '11(*)2' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '12', '11(+)2' );

Matcha även alla mönster mot NULL eller en sträng mot en NULL mönstret kommer inte att returnera några rader:

SELECT * FROM DUAL WHERE REGEXP_LIKE( NULL, '*' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', NULL );

Använder REGEXP_SUBSTR :

SELECT REGEXP_SUBSTR( '1', '+' ) FROM DUAL;

Matar ut en enda rad som innehåller NULL .



  1. Är ODP.NET omdistribuerbart?

  2. Konvertera från UniqueIdentifier till BigInt och tillbaka?

  3. Hur man löser Det går inte att lösa vissa moduler oracledb?

  4. mysql ersätt tecken med accent