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 shodě ř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 souboru 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ánila 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 tagy při importu souborů a použití regexu v desktopovém editoru pro filtrování a funkce najít a nahradit:
|
Příklad |
Popis |
|---|---|
|
<[^>]+> |
představuje <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 name@domain.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 znakem bílé mezery |
|
\S\n |
nový řádek předcházený jakýmkoli znakem, který není bílou mezerou |
|
<[^>]+>|\$[^=]+= |
převádí php proměnné a html kód ($svariable['name'] =) |
|
^\s*\'[^:]+: |
převádí javascriptový klíč pole 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 |
|
\{\{[^\}]+\}\} |
představuje text mezi závorkami {{}} |
|
\([^\)]+\) |
představuje text mezi závorkami () |
|
\^[^\^]+\^ |
představuje text mezi značkami ^ |
|
\@[^\@]+\@ |
představuje text mezi značkami @ |
|
\^[^\^\?]+\? |
představuje text mezi značkami ^ a ? |
|
\'[^']+\' |
představuje text mezi apostrofy ' ' |
|
\"[^"]+\" |
představuje text mezi uvozovkami "" |
|
\%[^\%]+\% |
představuje text mezi symboly % |
|
\$\{[^}]*\} |
představuje text mezi ${ a }, např. ${variable} |
|
\$[a-zA-Z0-9\-_]+ |
představuje ř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 rovnosti a bez mezery, např. klíč=hodnota |
|
(.*)= |
reprezentuje text před znaménkem rovnosti |
|
=(.*) |
reprezentuje text po znaménku rovnosti |
|
\/\/\S* |
reprezentuje hypertextové odkazy. Také, https:\/\/\S* |
|
</?mrk[^>]*> |
reprezentuje HTML/XML otevřené a uzavřené |
Poznámka
Jelikož jsou TXT soubory v TMS 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.'
Chcete-li importovat text po znaku = a mezi ' a ', použijte regex:
(?<=\= ').*(?=') -
errorMessage = "toto má být přeloženo"
Chcete-li importovat text po znaku = a mezi 'a' použijte regex:
(?<=\= ").*(?=") -
msgstr ("Číslo musí být vyšší než 0.")
Chcete-li importovat msgstr řetězce v monolingvních PO souborech pomocí TXT filtru, použijte regex:
(?<=msgstr ").*(?=") -
# Poznámka: Toto je poznámka
Chcete-li vyloučit řádky začínající #, použijte regex:
(^[^#].*) -
hodnoty '126', 'DCeT', 'Text (en)'
Chcete-li 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:
list/value -
pro import hodnoty ze seznamu a/nebo menu, použijte operátor | (NEBO):
list/value|menu/value -
pro import pouze první instance hodnoty z menu, použijte:
menu\[1\]/value -
pro import obsahu JSON pole následujícího určitému klíči, použijte:
(^|.*/)array\[.*\] -
pro import obsahu konkrétního pole objektů, použijte:
(^|.*/)arrays\[.*\].*
Příklad YAML souboru:
název: A
text: přeložit A
kategorie:
název: B
text: přeložit B
kategorie:
název: C
text: přeložit C
kategorie:
obsah:
název: D
text: přeložit D
regex pro importování:
-
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žívání regulárních výrazů před pokusem o práci s nimi.
Pravidla bez zlomu (zkratky atd.) a pravidla zlomu (konec věty tečkou atd.) jsou v .SRX souborech.
|
Příklad |
Popis |
|---|---|
|
[\p{C}] |
Neviditelný ovládací znak. |
|
[\p{Z}] |
Bílý znak |
|
[\p{Lu}] |
Velké písmeno, které má variantu malého písmena. |
|
[\p{N}] |
Jakýkoli typ číselného znaku. |
|
\Q ... \E |
Začátek a konec citace - (\QPřibl.\E). Toto se používá pro zkratky. |
|
\t |
Tabulátor |
|
\n |
Nový řádek |
|
\u2029 |
Oddělovač odstavců |
|
\u200B |
Nulová šířka |
|
\u3002 |
Ideografická tečka |
|
\ufe52 |
Malá tečka |
|
\uff0e |
Tečka s plnou šířkou |
|
\uff61 |
Tečka s poloviční šířkou |
|
\ufe56 |
Malý otazník |
|
\uff1f |
Otazník s plnou šířkou |
|
\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 ve tvaru srdce |
|
\ufe57 |
Malý vykřičník |
|
\uff01 |
Vykřičník s plnou šířkou |
|
`[\u0080-\uFFFF]+` |
Znaky z rozsahu Unicode \u0080 až \uFFFF |
|
`[\u00a8\u00b9\u00c4]+` |
Jedna nebo více výskytů specifikovaných Unicode znaků uvnitř hranatých závorek, např. \u00a8 + \u00b9 + \u00c4 |
|
Kontrola QA |
Regex zdroje |
Regex cíle |
|---|---|---|
|
Další čísla v cíli |
|
|
|
Pořadí tagů (nepárované, pro segmenty se 3 tagy). Upravte regex podle požadovaného počtu tagů. |
|
|
|
Pořadí tagů (párované, 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árovaných tagách |
|
|
|
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, s použitím vhodného jazykového desetinného oddělovače. |
|
|