Regulární výraz (zkráceně regex nebo regexp) je sekvence znaků, která tvoří vyhledávací vzor, hlavně pro použití při porovnávání vzorů s řetězci nebo porovnávání řetězců. Funkčnost je podobná operacím najít a nahradit s větší složitostí a specifikací nebo jako metoda pro vyloučení definovaného obsahu. Viz položka wikipedia pro podrobný popis regexu a tabulku použitých znaků.
Pro použití více regexů najednou vložte mezi ně znak potrubí |.
Regex může být použit v polích pro filtrování, vyhledávání a nahrazování v CAT editoru, v polích zdroje a cíle funkce vyhledávání obsahu, pro funkci v Nastavení importu souborů a pro přizpůsobení pravidel segmentace. Konvertor a CAT desktopový editor používají Java regex, zatímco CAT webový editor a vyhledávání v TMS používají Lucene regex nástroj.
Tip
Chatboti umělé inteligence mohou být při generování a ověřování regexu velmi efektivní.
Použijte Nástroje jako Regex101 k testování regexu s různými vstupy.
Důležité
Phrase podporuje Java regex, ale vrátí složité regulární výrazy, aby chránil systém před přetížením. Složené regexy jsou ty, které mají kvantifikátory (kromě přivlastňovacích) na skupinách, které obsahují další kvantifikátory (kromě přivlastňovacích).
Příklady pro převod textu na značky při importu souborů a použití regexu v desktopovém editoru pro filtrování a funkce najít a nahradit:
|
Příklad |
Popis |
|---|---|
|
<[^>]+> |
represents <html_tag> |
|
\{[^\}]+\} |
představuje {proměnná}, |
|
\[[^\]]+\] |
představuje [proměnná], |
|
\[\[.+?\]\] |
představuje [[aa[11]bb]]. |
|
\$[^\$]+\$ |
represents $operator_Name1$. |
|
\d+ |
představuje čísla. Také, [0-9]+ |
|
[A-Za-z0-9] |
představuje jakýkoli alfanumerický znak. |
|
.+\@.+\..+ |
e-mailová adresa jméno@doména.com |
|
\d{4}[-]\d{2}[-]\d{2} |
datum 2018-08-01 |
|
\s$ |
bílý znak na konci segmentu |
|
^\s |
bílý znak na začátku segmentu |
|
\s\s |
dvojitý bílý znak |
|
^\d |
číslice na začátku segmentu |
|
\w+\s\s\w+ |
dvojitý bílý znak mezi slovy |
|
\s\n |
nový řádek předcházený jakýmkoli bílým znakem |
|
\S\n |
nový řádek předcházený jakýmkoli znakem, který není bílý |
|
<[^>]+>|\$[^=]+= |
převádí php proměnné a html kód ($svariable['name'] =) |
|
^\s*\'[^:]+: |
převádí javascriptové pole klíče s přidanými mezerami na začátku řádku ( 'key' :) |
|
\{\{[^\}]+\}\}|\'[^']+\' |
nepřekládá {{text here}} '{{text here}} obsah a převádí ho na tagy |
|
\{\{[^\}]+\}\} |
reprezentuje text mezi {{}} závorkami |
|
\([^\)]+\) |
reprezentuje text mezi () závorkami |
|
\^[^\^]+\^ |
reprezentuje text mezi ^ značkami |
|
\@[^\@]+\@ |
reprezentuje text mezi @ značkami |
|
\^[^\^\?]+\? |
reprezentuje text mezi ^ a ? značkami |
|
\'[^']+\' |
reprezentuje text mezi ' ' apostrofy |
|
\"[^"]+\" |
reprezentuje text mezi "" uvozovkami |
|
\%[^\%]+\% |
reprezentuje text mezi % symboly |
|
\$\{[^}]*\} |
reprezentuje text mezi ${ a }, např. ${variable} |
|
\$[a-zA-Z0-9\-_]+ |
reprezentuje řetězec, který začíná s $, např. $appName |
|
(?<=\: ").*(?=") |
reprezentuje text uvnitř dvojitých uvozovek po dvojtečce a mezeře, např. |
|
(?<=\: ').*(?=') |
reprezentuje text uvnitř jednoduchých uvozovek po dvojtečce a mezeře, např. |
|
(?<=\=).*(?=) |
reprezentuje text po znaménku rovná se a bez mezery, např. key=value |
|
(.*)= |
reprezentuje text před znaménkem rovná se |
|
=(.*) |
představuje text za znakem rovnosti |
|
\/\/\S* |
představuje hypertextové odkazy. Také, https:\/\/\S* |
|
</?mrk[^>]*> |
představuje HTML/XML otevřené a uzavřené |
Poznámka
Protože TXT soubory v TMS jsou zpracovávány řádek po řádku, určité regulární výrazy, které fungují v jiných prostředích, nemusí fungovat podle očekávání.
Příklady regulárních výrazů při importu konkrétního textu:
-
## ChybováZpráva ##1## Číslo musí být vyšší než 0. ##Z##
Pro import textu mezi ##1## a ##Z##, použijte regex:
(?<=##1## ).*(?= ##Z##) -
ChybováZpráva ("Číslo musí být vyšší než 0.")
Pro import textu mezi (" a "), použijte regex:
(?<=\(").*(?="\)) -
'chybováZpráva' = 'Číslo musí být vyšší než 0.'
Pro import textu za = znakem a mezi ' a ', použijte regex:
(?<=\= ').*(?=') -
chybováZpráva = "to je k překladu"
Pro import textu za znakem = a mezi 'a' použijte regex:
(?<=\= ").*(?=") -
msgstr ("Číslo musí být vyšší než 0.")
Pro import msgstr řetězců v monolingvních PO souborech pomocí TXT filtru, použijte regex:
(?<=msgstr ").*(?=") -
# Poznámka: Toto je poznámka
Pro vyloučení řádků začínajících na #, použijte regex:
(^[^#].*) -
hodnoty '126', 'DCeT', 'Text (en)'
Importovat pouze text v uvozovkách a s (en), jako je Text (en), použijte regex:
(?<=')[^']*\(en\)(?=')
Příklad struktury JSON:
{
"seznam": {
"id": "1",
"value": "text 1 for translation."
},
"text": {
"id": "2",
"value": "text 2 for translation."
},
"menu": {
"id": "3",
"value": "text 3 for translation."
},"array": ["blue","green"],"arrays": [{ "color": "blue", "title": "BLUE"
}, { "color": "green", "title": "GREEN" } ]}
-
pro import všech hodnot bez ohledu na úroveň použijte:
(^|.*/)value -
pro import pouze jedné hodnoty ze seznamu použijte:
seznam/hodnota -
pro import hodnoty ze seznamu a/nebo menu použijte operátor | (NEBO):
seznam/hodnota|menu/hodnota -
pro import pouze první instance hodnoty z menu použijte:
menu\[1\]/hodnota -
pro import obsahu JSON pole následujícího určitému klíči použijte:
(^|.*/)pole\[.*\] -
pro import obsahu konkrétního pole objektů použijte:
(^|.*/)pole\[.*\].*
Příklad souboru YAML:
title: A
text: translate A
categories:
title: B
text: translate B
categories:
title: C
text: translate C
categories:
content:
title: D
text: translate D
regex pro import:
-
pouze 'přeložit A' :
text -
pouze 'přeložit C':
kategorie\[2\]/text -
pouze 'přeložit D':
kategorie\[\d+\]/obsah[\1\]/text -
veškerý text:
text|kategorie\[\d+\]/text|kategorie\[\d+\]/obsah[\d+\]/text
Okapi, Java a Unicode se používají pro pravidla segmentace v .SRX souborech.
Použití regexu v .SRX souborech je složité a doporučuje se základní znalost použití regulárních výrazů před pokusem o práci s nimi.
Pravidla bez zalomení (zkratky atd.) a pravidla pro zalomení (konec věty tečkou atd.) jsou v .SRX souborech.
|
Příklad |
Popis |
|---|---|
|
[\p{C}] |
Neviditelný ovládací znak. |
|
[\p{Z}] |
Whitespace |
|
[\p{Lu}] |
Velké písmeno, které má variantu malého písmena. |
|
[\p{N}] |
Jakýkoli druh číselného znaku. |
|
\Q ... \E |
Začátek a konec citace - (\QPřibl.\E). To se používá pro zkratky. |
|
\t |
Tabulátor |
|
\n |
Nový řádek |
|
\u2029 |
Oddělovač odstavců |
|
\u200B |
Znak s nulovou šířkou |
|
\u3002 |
Ideografická tečka |
|
\ufe52 |
Malá tečka |
|
\uff0e |
Široká tečka |
|
\uff61 |
Poloviční ideografická tečka |
|
\ufe56 |
Malý otazník |
|
\uff1f |
Široký otazník |
|
\u203c |
Dvojitý vykřičník |
|
\u2048 |
Otazník vykřičník |
|
\u2762 |
Těžký ornament vykřičníku |
|
\u2763 |
Těžký ornament vykřičníku srdce |
|
\ufe57 |
Malý vykřičník |
|
\uff01 |
Celší vykřičník |
|
`[\u0080-\uFFFF]+` |
Znaky z rozsahu Unicode \u0080 do \uFFFF |
|
`[\u00a8\u00b9\u00c4]+` |
Jedno nebo více výskytů specifikovaných Unicode znaků uvnitř hranatých závorek, např. \u00a8 + \u00b9 + \u00c4 |
|
Kontrola QA |
Regex zdroj |
Regex cíl |
|---|---|---|
|
Další čísla v cíli |
|
|
|
Pořadí tagů (nepárové, pro segmenty se 3 tagy). Upravte regex podle požadovaného počtu tagů. |
|
|
|
Pořadí tagů (párové, pro segmenty se 3 tagy). Upravte regex podle požadovaného počtu tagů. |
|
|
|
Mezery před tagy |
|
|
|
Mezery za tagy |
|
|
|
Žádná mezera před tagy |
|
|
|
Znaky, které nejsou bílými znaky po párových tagech |
|
|
|
Chybějící hranaté závorky |
|
|
|
Chybějící kulaté závorky |
|
|
|
Použijte následující regulární výrazy k ověření stejného počtu identických desetinných čísel, přičemž použijte vhodný jazykově specifický desetinný oddělovač. |
|
|