Widzę, że będzie z tym ciężko jednak :/ niestety Bury pajacu, twoja odpowiedź mnie nie satysfakcjonuje, ponieważ to moje zapytanie to jedynie część większego zapytania regularnego (które rozrosło się już z resztą niemiłosiernie...). Postaram się przybliżyć:
Na przykładzie: dodatek a-b
dodatek - to tak naprawdę wyrażenie regularne na wiele różnych słów, które mogą tu wystąpić. Są podzielone na dwie grupy, zależnie od tego do której grupy wyraz należy w dalszej części będzie wymagany nawias lub nie. Nazwijmy je REGEXP_WYRAZ1 i REGEXP_WYRAZ2
a, b - to kolejne wyrażenie regularne. A i B mogą być: pojedynczą literą, liczbą rzymską, liczbą arabską, liczbą arabską, po której nastąpi dowolna liczba liter. Nazwijmy go REGEXP_NR.
REGEXP_NR jest NIESTETY wykorzystywany w wielu miejscach w programie, i nie moge swobodnie wstawić tam np. niezamkniętego nawiasu. To wyrażenie musi być atomowe. Jest zbudowane z dwóch jeszcze bardziej atomowych części, REGEXP_NR_NORMALNY i REGEXP_NR_RZYMSKI gdzie jedno jest dla rzymskich a drugie dla kombinacji liter i cyfr. REGEXP_NR_NORMALNY jest miejscem problemu - to tu jest zapis, który dotyczy liter i pozwala zaznaczyć pojedynczą literę bez warunku co dalej. To tu potrzebna jest zmiana.
Ogólna koncepcja w tej chwili to (będę łączyć stringi plusem):
"^( ?" + "(" + REGEXP_WYRAZ1 + "\.?" + " " + REGEXP_DOZWOLONE_ZNAKI_POMIEDZY1 + "|" + REGEXP_WYRAZ2 + "\.?" + " " + REGEXP_DOZWOLONE_ZNAKI_POMIEDZY2 + ")" + " " + REGEXP_NR + ")+$"
gdzie REGEXP_NR wygląda mniej więcej tak:
"((" +REGEXP_NR_RZYMSKI + "(" + DajMyslnikRegexp + REGEXP_NR_RZYMSKI + ")" + ")"
+ "|(" + REGEXP_NR_RZYMSKI + "(" + DajMyslnikRegexp + REGEXP_NR_NORMALNY + ")?" + ")"
+ "|(" & REGEXP_NR_NORMALNY + "(" + DajMyslnikRegexp + REGEXP_NR_NORMALNY + ")?" + "))"
co oznacza, że moga wystąpić kombinacje takie jak np. 10-15a, III-232, IV-XXXII.
Fiu. Mam nadzieję, że się nie walnęłam.
Obecnie to wygląda tak: http://wklej.org/id/435252/ Starałam się choć delikatnie enterami oddzielić bloki od siebie, ale sami widzicie, że wygląda to jak sajgon i tyle. Działa jednak bardzo dobrze, dla wszystkich "ciekawych" przypadków, poza tym, w którym nie ma numeru :/ Wtedy spoko, jeśli nie dopasuje - jak mówiłam, jest oddzielny mechanizm, który tu przypilnuje, żeby wychwycić co trzeba (czyli pojedynczy wyraz). Problem jest w tym, że mi zaciąga literę z następnego wyrazu.
I mam do wyboru - przeskoczyć jakoś ten jeden drobny błąd, albo wywalić cały mechanizm i napisać od nowa... Tak blisko ukończenia chciałabym tego uniknąć...
Edit (sory, za wyświetalnie go pokawałku - niechcący wysłałam w trakcie edycji):
A no i może jeszcze przykłady - tym razem dokładniejsze i bardziej zróżnicowane, żeby wiadomo było o co chodzi:
Ala art. 15 k.c. ==> art. 15
Ala art. III-233 k.c. ==> art. III-233
Ala art. V k.c. ==> art. V
Ala art. 15a-17abc k.c. ==> art. 15a-17abc
Ala art. A k.c. ==> art. A
Ala art. A-B k.c. ==> art. A-B
Ala art. ABC k.c. ==> [brak dopasowania]
Ala art. 5, 6, 7 ==> art. 5
Ala art. 5. ==> art. 5
Ala (art. 15) ==> art. 15
Ok, na razie chyba starczy.