Avancerade Regex-koncept

När grundläggande regex inte räcker, finns det kraftfulla avancerade tekniker för komplexa filnamn-omvandlingar.

1. Gruppering och Capture Groups

Vanliga Grupper ()

# Gruppera delar av filnamnet
^(\d{4})-(\d{2})-(\d{2})_(.+)$

# Omvandling: 2024-01-15_vacation.jpg → vacation_2024-01-15.jpg
# Ersätt med: $4_$1-$2-$3

Non-capturing Grupper (?:)

# Gruppera utan att fånga
^(?:IMG_|DSC_|PIC_)(\d{4})\.jpg$

# Matchar: IMG_1234.jpg, DSC_5678.jpg, PIC_9999.jpg
# Fångar bara numret: 1234, 5678, 9999

Named Groups (?P<name>)

# Namngivna grupper för klarhet
^(?P<prefix>\w+)_(?P<number>\d+)_(?P<suffix>\w+)\.jpg$

# Ersätt med: ${suffix}_${number}_${prefix}.jpg

2. Lookahead och Lookbehind

Positive Lookahead (?=)

# Matcha text följt av specifik text
\d+(?=_copy)\.jpg

# Matchar: 123_copy.jpg, 456_copy.jpg
# Men inte: 789.jpg

Negative Lookahead (?!)

# Matcha text INTE följd av specifik text
\d+(?!_copy)\.jpg

# Matchar: 123.jpg, 456.jpg
# Men inte: 789_copy.jpg

Lookbehind (?<=)

# Matcha text föregången av specifik text
(?<=IMG_)\d+\.jpg

# Matchar numret i: IMG_1234.jpg
# Resultat: 1234.jpg

3. Backreferences

Nummerade Backreferences

# Fånga och återanvänd
^(.+)_\1\.jpg$

# Matchar: vacation_vacation.jpg
# Men inte: vacation_trip.jpg

# Omvandling: duplicate_duplicate.jpg → duplicate.jpg
# Ersätt med: $1.jpg

Named Backreferences

# Återanvänd namngivna grupper
^(?P<name>.+)_(?P=name)\.jpg$

# Matchar: vacation_vacation.jpg
# Ersätt med: ${name}.jpg

4. Alternation och Conditional

Alternation (|)

# Välj mellan alternativ
^(IMG_|DSC_|PIC_)(\d+)\.jpg$

# Matchar: IMG_1234.jpg, DSC_5678.jpg, PIC_9999.jpg
# Ersätt med: photo_$2.jpg

Conditional (?()

# Villkorlig matching
^(IMG_|DSC_)?(\d+)(?(1)_processed)\.jpg$

# Matchar: IMG_1234_processed.jpg, 5678.jpg
# Men inte: IMG_1234.jpg (saknar _processed)

5. Avancerade Quantifiers

Possessive Quantifiers

# "Girig" matching som inte backar
\d++\.jpg

# Matchar så många siffror som möjligt
# Stannar inte för backtracking

Atomic Grupper (?>)

# Atomisk gruppering
^(?>\d+)_(.+)\.jpg$

# Gruppen \d+ kan inte delas upp
# Förhindrar backtracking

6. Praktiska Exempel

Foto-organisering med EXIF-data

# Komplext foto-mönster
^(?P<date>\d{8})_(?P<time>\d{6})_(?P<camera>\w+)_(?P<event>\w+)\.jpg$

# Omvandling till: ${event}_${date}_${time}_${camera}.jpg
# Resultat: vacation_20240115_143022_Canon.jpg

Dokument-organisering

# Dokument med versioner
^(?P<doc>.+)_v(?P<version>\d+)(?:_(?P<status>draft|final|review))?\.pdf$

# Omvandling: report_v2_final.pdf → final_report_v2.pdf
# Ersätt med: ${status}_${doc}_v${version}.pdf

Media-filer med metadata

# Komplext media-mönster
^(?P<artist>[^-]+)-(?P<album>[^-]+)-(?P<track>\d+)-(?P<title>[^.]+)\.mp3$

# Omvandling till: ${track}_${title}_${artist}_${album}.mp3
# Resultat: 01_Song_Name_Artist_Name_Album_Name.mp3

7. Prestanda-optimering

Undvik Katastrofal Backtracking

# DÅLIGT - kan orsaka hängning
(.+)*\.jpg

# BÄTTRE - använd possessive eller atomic
(?>.+)*\.jpg
(.++)*\.jpg

Använd Specifika Mönster

# DÅLIGT - för brett
.*\.jpg

# BÄTTRE - mer specifikt
\w+\.jpg
[^.]*\.jpg

8. Säkerhet och Validering

Validera Input

# Säker regex för filnamn
^[a-zA-Z0-9._-]+\.jpg$

# Undvik farliga tecken
^[^<>:"/\\|?*]+\.jpg$

Begränsa Längd

# Max 50 tecken före extension
^.{1,50}\.jpg$

9. Verktyg för Regex-testning

  • Regex101: Online regex-tester med förklaringar
  • Regexr: Interaktiv regex-redigerare
  • RegEx Pal: Snabb regex-validering

10. Bästa Praktiker

  • Testa alltid: Verifiera mönster på testdata
  • Dokumentera: Förklara komplexa mönster
  • Backup: Skapa säkerhetskopior innan massomdöpning
  • Prestanda: Undvik backtracking-problem
  • Säkerhet: Validera input och begränsa mönster

Redo att testa avancerade regex-mönster?

Prova vårt gratis online verktyg med regex-stöd för säker massomdöpning!

Testa BatchRename Pro