Difference between revisions of "FR/Documentation/Expressions Regulieres dans Writer"

From Apache OpenOffice Wiki
Jump to: navigation, search
(The least you need to know about regular expressions)
m (Trucs et astuces: recherche des caractères alphabétiques)
 
(42 intermediate revisions by 5 users not shown)
Line 12: Line 12:
  
 
*Dans la boîte de dialogue Édition - Rechercher & remplacer
 
*Dans la boîte de dialogue Édition - Rechercher & remplacer
 +
 +
 +
<center>[[Image:Recherche_%26_remplacer.png]]</center>
 +
  
 
*Avec la commande Édition - Modification - Accepter/rejeter (onglet Filtre)
 
*Avec la commande Édition - Modification - Accepter/rejeter (onglet Filtre)
Line 29: Line 33:
 
*Avec la commande Rechercher un enregistrement
 
*Avec la commande Rechercher un enregistrement
  
La boîte de dialogue qui apparaît lorsque vous utilisez la commande ci-dessus possède généralement une option d'utilisation des expressions régulières (qui est désactivée par défaut). Par exemple
+
La boîte de dialogue qui apparaît lorsque vous utilisez la commande ci-dessus possède généralement une option d'utilisation des expressions régulières (qui est désactivée par défaut). Par exemple :
 +
 
 +
 
 +
<center>[[Image:Recherche_d%27enregistrement.jpg|location of regular expression tick box]]</center>
  
<center>[[Image:Regex_howto_1.png|location of regular expression tick box]]</center>
 
  
 
Vous devez vérifier le statut des expressions régulières à chaque fois que vous appelez la boîte de dialogue puisque son comportement par défaut est d'être désactivée.
 
Vous devez vérifier le statut des expressions régulières à chaque fois que vous appelez la boîte de dialogue puisque son comportement par défaut est d'être désactivée.
Line 62: Line 68:
 
* <b>^$</b> trouve un paragraphe vide.
 
* <b>^$</b> trouve un paragraphe vide.
  
== How regular expressions are applied in OpenOffice.org ==
+
== Comment sont appliquées les expressions régulières dans OpenOffice.org ==
OpenOffice.org regular expressions appear to divide the text to be searched into portions and examine each portion separately.
+
Les expressions régulières dans OpenOffice.org divisent le texte à rechercher en portions et examinent chaque portion séparément.  
  
 
+
Dans Writer, le texte apparaît séparé en paragraphes. Par exemple '''x.*z''' ne correspondra pas à '''x''' à la fin d'un paragraphe avec '''z''' commençant le paragraphe suivant ('''x.*z signifie '''x''' puis n'importe quels caractères puis '''z'''). Les paragraphes semblent être traités séparément (bien que nous parlerons de certains cas spéciaux à la fin de cet how-to).
In Writer, text appears to be divided into paragraphs. For example ''' x.*z''' will not match '''x''' at the end of a paragraph with '''z''' beginning the next paragraph (''' x.*z''' means '''x''' then any or no characters then '''z'''). Paragraphs seem to be treated separately (although we discuss some special cases at the end of this HowTo).
+
  
  
 
<center>[[Image:Regex_howto_3.png|the scope of regular expressions]]</center>
 
<center>[[Image:Regex_howto_3.png|the scope of regular expressions]]</center>
  
 +
De plus Writer considère chaque cellule de tableau et chaque cadre de texte séparément. Les cadres de texte sont examinés après que tout autre texte ou cellules de tableau sur toutes les pages aient été examinés.
  
In addition Writer considers each table cell and each text frame separately. Text frames are examined after all the other text / table cells on all pages have been examined.
+
Dans la boîte de dialogue Rechercher & remplacer, les expressions régulières doivent être utilisées dans la zone <b>Rechercher</b>. En général, elles <b>ne</b> doivent pas être utilisées dans la zone <b>Remplacer par</b>. Les exceptions sont discutées plus loin.
  
 +
== Caractères littéraux ==
 +
Si les expressions régulières utilisées contiennent des caractères autres que ceux appelés 'caractères spéciaux' '''<nowiki>. ^ $ * + ? \ [ ( { |</nowiki>''' alors ces caractères correspondent littéralement.
  
In the Find & Replace dialog, regular expressions may be used in the <b>Search for</b> box. In general they may <b>not</b> be used in the <b>Replace</b> with box. The exceptions are discussed later.
+
''Par exemple :'' '''bord''' correspondra à '''bord''', 're'''bord''' et 'dé'''bord'''er'.  
  
 +
OpenOffice.org vous permet de choisir si vous devez respecter les caractères en 'MAJUSCULE' ou en 'miniscule' dans la rechercher. Si vous cochez la case 'Respecter la casse' dans la boîte de dialogue '''Rechercher & remplacer''', alors '''bord''' ne correspondra pas à '''Bord''' ou '''REBORD''' <nowiki>; si vous décochez cette case, alors la casse est ignorée et les deux écritures seront trouvées.</nowiki>
  
== Literal characters ==
+
== Les caractères spéciaux ==
If your regular expression contains characters other than the so-called 'special characters' '''<nowiki>. ^ $ * + ? \ [ ( { |</nowiki>''' then those characters are matched literally.
+
Les caractères spéciaux sont '''<nowiki>. ^ $ * + ? \ [ ( { |</nowiki>'''
  
 +
Ils ont une signification particulière dans une expression régulière, comme nous allons le décrire.
  
''For example:'' '''red''' matches '''red''' '''red'''raw and F'''red'''die.
+
Si vous souhaitez rechercher un de ces caractères littéralement, placez un backslash ''''<nowiki>\</nowiki>'''' avant celui-ci.
  
  
OpenOffice.org allows you to choose whether you care if a character is 'UPPER CASE' or 'lower case'. If you tick the box to 'match case' on the '''Find and Replace''' dialog, then '''red''' will not match '''Red''' or F'''RED'''<nowiki>; if you un-tick that box then the case is ignored and both will be matched.</nowiki>
+
''Par exemple :'' pour trouver '''$100''' utilisez '''\$100''' - le '''\$''' est pris pour le caractère '''$''' .
  
 +
== Caractère seul correspondant au .  ? ==
 +
Le caractère spécial '<b>.</b>' correspond à n'importe quel caractère seul (excepté sur les nouvelles lignes).
  
== Special characters ==
+
''Par exemple :'' '''c.s''' correspond à '<b>ces</b>' and 'en<b>cas</b>' et 'in<b>cis</b>er' et 'fa<b>c s</b>imilé'  
The special characters are '''<nowiki>. ^ $ * + ? \ [ ( { |</nowiki>'''
+
  
 +
Le caractère spécial point d'interrogation '<b>?</b>' signfie 'correspond à zéro ou à un des caractères précédents' - ou 'correspond au caractère précédent s'il est trouvé'.
  
They have special meanings in a regular expression, as we're about to describe.
+
''Par exemple :'' '''lie?n''' correspond à '<b>lin</b>' et '<b>lien</b>' - '<b>a?</b>' signifie 'correspond à un seul s'il y en a un'.
  
 +
Les caractères spéciaux peuvent être utilisés en combinaisons avec d'autres. Un point suivi d'un point d'interrogation signifie 'correspond à zéro ou l'un des caractères seuls'.
  
If you wish to match one of these characters literally, place a backslash ''''<nowiki>\</nowiki>'''' before it.
+
''Par exemple :'' '''star.?ing''' correspond à '<b>staring</b>', '<b>starring</b>', '<b>starting</b>', et '<b>starling</b>', mais pas '<b>startling</b>'
  
 +
== Répéter une correspondance +  *  {m,n} ==
  
''For example:'' to match '''$100''' use '''\$100''' - the '''\$''' is taken to mean '''$''' .
+
Le caractère spécial <b>'+'</b> signifie 'correspond à un ou plus des caractères précédents'.
  
 +
''Par exemple :'' <b>ce+s</b> correspond à <b>'ces'</b> et <b>'cees'</b> et <b>'ceeeees'</b> - <b>e+</b> signifie correspond à un ou plus <b>e</b>'s.
  
== Single character match .  ? ==
+
Le caractère spécial étoile <b>'<nowiki>*</nowiki>'</b> signifie 'correspond à zéro ou à plus des caractères précédents'.
The dot '<b>.</b>' special character stands for any single character (except newline).
+
  
 +
''Par exemple :'' <b>lie*n</b> corresond à <b>'lin'</b> et <b>'lien'</b> et <b>'lieeeen'</b> - <b>'a*'</b> signifie correspond à zéro ou plus de <b>a</b>'s .
  
''For example:'' '''r.d''' matches '<b>red</b>' and 'hot<b>rod</b>' and 'b<b>rid</b>e' and 'you<b>r d</b>og'  
+
Une utilisation courante de <b>'<nowiki>*</nowiki>'</b> est après le caractère point. - ie <b>'<nowiki>.*</nowiki>'</b> qui signifie 'n'importe lequel ou pas de caractère'.
  
 +
''Par exemple :'' <b>lie.*n</b> correspond a <b>'lien'</b> et à <b>'lieXn'</b> et à <b>lieYYYYn</b> mais pas à - <b>'lin'</b> ou <b>'liXn'</b>.
  
The question mark '<b>?</b>' special character means 'match zero or one of the preceding character' - or 'match the preceding character if it is found'.
+
Utilisez l'étoile <b>'<nowiki>*</nowiki>'</b> avec précautions ; elle va récupérer tout ce qu'elle peut :
  
 +
''Par exemple :'' <b>'l.*n'</b> correspond à <b>lien</b> mais dans Writer, si la paragraphe est actuellement 'Une vendeuse lui a montré le lien marron', la correspondance trouvée est <b>lui a montré le lien marron</b> - à savoir, le premier <b>'l'</b> et le dernier <b>'n'</b> possible. Les expressions régulières sont gourmandes par nature.
  
''For example:'' '''rea?d''' matches '<b>red</b>' and '<b>read</b>' - '<b>a?</b>' means 'match a single a if there is one'.
+
Vous devez spécifier combien de fois la correspondance doit être répétée, avec des accolades <b>{ }</b>. Par exemple
 +
<b>a{1,4}rgh!</b> correspondra à <b>argh!</b>, <b>aargh!</b>, <b>aaargh!</b> et <b>aaaargh!</b> - en d'autres termes entre 1 et 4 <b>a</b> puis <b>rgh!</b>.
 +
 +
Notez également que <b>a{3}rgh!</b> correspondra exactement à 3 <b>a</b>, ie <b>aaargh!</b> et <b>a{2,}rgh!</b> (avec une virgule) correspondra à au moins 2 <b>a</b>, par exemple <b>aargh!</b> et <b>aaaaaaaargh!</b>.
  
 +
== Correspondance de position ^  $  \<  \> ==
 +
Le caractère spécial accent circonflexe <b>'^'</b> signifie 'correspond au début du texte'.
  
Special characters can be used in combination with each other. A dot followed by a question mark means 'match zero or one of any single chacter'.
+
Le caractère spécial <b>'$'</b> signifie 'correspond à la fin du texte'.
  
 +
Souvenez-vous que les expressions régulières d'OpenOffice.org divisent le texte à rechercher - chaque paragraphe de Writer est examiné de façon séparée.
  
''For example:'' '''star.?ing''' matches '<b>staring</b>', '<b>starring</b>', '<b>starting</b>', and '<b>starling</b>', but not '<b>startling</b>'
+
''Par exemple'' : <b>^cas</b> correspond à <b>'cas'</b> au début d'un paragraphe (<b>Cas</b> à étudier...).
  
== Repeating match +  *  {m,n} ==
+
''Par exemple'' : <b>cas$</b> correspond à <b>'cas'</b> à la fin d'un paragraphe (Étude de <b>cas</b>).
The plus <b>'+'</b> special character means 'match one or more of the preceding character'.
+
  
 +
''Par exemple'' : <b>^cas$</b> correspond à une cellule de tableau ne contenant que <b>'cas'</b>.
  
''For example:'' <b>re+d</b> matches <b>'red'</b> and <b>'reed'</b> and <b>'reeeeed'</b> - <b>e+</b> means match one or more <b>e</b>'s.
+
De plus, un retour à la ligne forcé (saisi par Maj+Entrée) est considéré comme le début ou la fin d'un texte et autorisera la correspondance avec <b>^</b> et <b>$</b>.
  
 +
Le caractère spécial backslash <b>'\'</b> donne une signification spéciale à la paire de caractères <b>'\<'</b> et <b>'\>'</b>, c'est à dire 'correspond au début d'un mot' et 'correspond à la fin d'un mot.
  
The star <b>'<nowiki>*</nowiki>'</b> special character means 'match zero or more of the preceding character'.
+
''Par exemple'' : <b><nowiki>\<cas</nowiki></b> correspond à 'cas' au début d'un mot (il prend le <b>cas</b>ier près de la porte).
  
 +
''Par exemple'' : <b><nowiki>cas\></nowiki></b> correspond à 'cas' à la fin d'un mot (il prend un en<b>cas</b> pour le déjeuner).
  
''For example:'' <b>rea*d</b> matches <b>'red'</b> and <b>'read'</b> and <b>'reaaaaaaad'</b> - <b>'a*'</b> means match zero or more <b>a</b>'s .
+
Le test utilisé pour définir le début ou la fin d'un mot semble être que le caractère précédent ou suivant est un espace, un caractère de soulignage (_), une tabulation, une nouvelle ligne, une marque de paragraphe ou n'importe quel caractère non alphanumérique.  
  
 +
''Par exemple'' : <b><nowiki>\<cas</nowiki></b> correspond à 'personne@<b>cas</b>sis.com'
  
A common use for <b>'<nowiki>*</nowiki>'</b> is after the dot character - ie <b>'<nowiki>.*</nowiki>'</b> which means 'any or no characters'.
+
''Par exemple'' : <b><nowiki>cas\></nowiki></b> correspond à 'Je lui ai dit "N'oublie pas ton en<b>cas</b>"'
  
''For example:'' <b>rea.*d</b> matches <b>'read'</b> and <b>'reaXd'</b> and <b>'reaYYYYd'</b> but not - <b>'red'</b> or <b>'reXd'</b>
+
== Correspondances alternatives  |  [...]  ==
 +
Le caractère spécial pipe  '<b>|</b>' permet de rechercher la correspondance de l'expression '<b>|</b>' de chaque côté.
  
Use the star <b>'<nowiki>*</nowiki>'</b> with caution; it will grab everything it can:
+
''Par exemple'' : <b>rouge|bleu</b> correspond à <b>'rouge'</b> et <b>'bleu'</b>
  
 +
Malheureusement, parfois, les expressions régulières séparées par un caractère pipe ne sont pas évaluées en fonction de la séquence. C'est le sujet de l'issue [http://qa.openoffice.org/issues/show_bug.cgi?id=84828 issue 84828]
  
''For example:'' <b>'r.*d'</b> matches <b>'red'</b> but in Writer if your paragraph is actually 'The referee showed him the red card again' the match found is <b>'referee showed him the red card'</b> - that is, the first <b>'r'</b> and the last possible <b>'d'</b>. Regular expressions are greedy by nature.
+
Par exemple : <b>^rouge|bleu</b> correspond à des paragraphes commençant par <b>^'rouge'</b> et n'importe quelle occurrence de <b>^'bleu'</b>, mais <b>^bleu|^rouge</b> correspond de façon incorrecte aux occurrences de <b>^'bleu'</b>, et oublie de correspondre aux paragraphes commençant par <b>^'rouge'</b>.
  
 +
Le crochet ouvert <b>[</b> est un caractère spécial. Les caractères entourés de crochets sont traités comme des alternatives - n'importe lequel d'entre eux peut correspondre. Vous pouvez également inclure des plages de caractères comme '''a-z''' ou '''0-9''' plutôt que saisir '''abcdefghijklmnopqrstuvwxyz''' ou '''0123456789'''.
  
You may specify how many times you wish the match to be repeated, with curly brackets <b>{ }</b>. For example <b>a{1,4}rgh!</b> will match <b>argh!</b>, <b>aargh!</b>, <b>aaargh!</b> and <b>aaaargh!</b> - in other words between 1 and 4 <b>a</b>'s then <b>rgh!</b>.
+
''Par exemple'' : '''<nowiki>c[ea]s</nowiki>''' correspond à ''' 'ces' ''' et ''' 'cas' ''' mais pas à ''' 'cos' '''.
  
Also note that <b>a{3}rgh!</b> will match precisely 3 <b>a</b>'s, ie <b>aaargh!</b>, and  <b>a{2,}rgh!</b> (with a comma) will match at least 2 <b>a</b>'s, for example <b>aargh!</b> and <b>aaaaaaaargh!</b>.
+
''Par exemple'' : '''''<nowiki>[m-p]ue</nowiki>''' correspond à ''''mue'''' et ''''nue'''' et ''''oue'''' et ''''pue''''
  
== Positional match ^  $  \< \> ==
+
''Par exemple'' : '''''<nowiki>[hm-p]ue</nowiki>''' correspond à ''''hue'''' et ''''mue'''' et ''''nue'''' et ''''oue'''' et ''''pue''''
The circumflex <b>'^'</b> special character means 'match at the beginning of the text'.
+
  
The dollar <b>'$'</b> special character means 'match at the end of the text'.
+
Les caractères spéciaux utilisés à travers les crochets n'ont pas la même signification spéciale. Les seuls caractères qui ont une signification spéciale sont <b>]</b>, <b>-</b>, <b>^</b> et  <b><nowiki>\</nowiki></b> et leur signification est :
  
  
Remember that OpenOffice.org regular expressions divide up the text to be searched - each paragraph in Writer is examined separately.
+
* <b>]</b> - un crochet fermant termine l'ensemble de correspondance alternative <b><nowiki>[abcdef]</nowiki></b>
 +
* <b>-</b> - un tiret indique une plage de caractères comme nous l'avons vu dans <b><nowiki>[0-9]</nowiki></b>
 +
* <b>^</b> - si l'accent circonflexe est le premier caractère dans les crochets, il interdit la recherche sur ces caractères. Par exemple <b><nowiki>[^a-dxyz]</nowiki></b> correspond à n'importe quel caractères sauf <b>abcdxyz</b>.
 +
* <b><nowiki>\</nowiki></b> - le backslash est utilisé pour permettre à <b>]</b>, <b>-</b>, <b>^</b> et <b><nowiki>\</nowiki></b> d'être utlisés littéralement entre les crochets. Par exemple <b>\]</b>] correspond à un crochet fermant littéral, ainsi <b>[[\]a]</b> correspondra à un crochet ouvrant <b>[</b>, un crochet fermant <b>]</b> ou un <b>a</b>. <b>\\</b> correspond à un backslash littéral.  
  
''For example:'' <b>^red</b> matches <b>'red'</b> at the start of a paragraph (<b>red</b> night shepherd's delight).
+
Pour insister : Ceci est la signification de ces caractères à l'intérieur des crochets, et n'importe quel autre caractère est traité littéralement. Par exemple <b>[\t ]</b> correspondra à un backslash <b>\</b>, un '<b>t</b>' ou à un espace - <b>pas</b> à une tabulation ou à un espace.
  
''For example:'' <b>red$</b> matches <b>'red'</b> at the end of a paragraph (he felt himself go <b>red</b>)
+
== Les expressions POSIX entre crochets  [:alpha:] [:digit:] etc..  ==
 +
Il y a une grande confusion dans la communauté OpenOffice.org à propos de ces expressions. L'aide, elle-même, n'est pas très claire.
  
''For example:'' <b>^red$</b> matches inside a table cell that contains just <b>'red'</b>
+
Il y a beaucoup d'expressions 'POSIX entre crochets' (parfois appelées classes de caractère POSIX) disponibles dans les expressions régulières d'OpenOffice.org, sous la forme de <b>[:nomclasse:]</b> qui autorisent une correspondance avec n'importe quel caractère de cette classe. Par exemple <b><nowiki>[:digit:]</nowiki></b> signifie n'importe quel nombre <b>0123456789</b>.
  
 +
Celles-ci (par définition) ne peuvent <b>qu'apparaître à l'intérieur des crochets</b> d'une correspondance alternative - donc une syntaxe correcte est de la forme <b><nowiki>[abc[:digit:]]</nowiki></b>, qui correspond à '''a''', '''b''', '''c''' ou n'importe quel nombre de '''0-9'''. Une syntaxe correcte correspondant à un seul nombre est de la forme <b><nowiki>[[:digit:]]</nowiki></b>.
  
In addition a hard line break (entered by Shift-Enter) is considered the beginning / end of text, and will allow a <b>^</b> or <b>$</b> match.
+
Malheureusement, cela ne fonctionne pas comme il devrait ! La syntaxe correcte ne fonctionne pas du tout, mais à l'heure actuelle une syntaxe incorrecte  de la forme <b><nowiki>([:digit:])</nowiki></b> correspondra à un nombre dans la mesure où il est <b>en dehors</b> des crochets d'une correspondance alternative (''évidemment, ce n'est pas satisfaisant et le propos de l'[http://qa.openoffice.org/issues/show_bug.cgi?id=64368 issue 64368]'').
  
 +
Les expressions POSIX entre crochets disponibles sont listées ci-dessous. Notez que la définition exacte de chacune dépend des ''paramètres locaux'' - par exemple dans une autre langue, certains caractères peuvent être considérés comme des lettres alphabétiques pour [:alpha:]. La signification donnée ici s'applique généralement à des paramètres de langue anglaise (et ne prend pas en compte les problèmes Unicode).
  
The backslash <b>'\'</b> special character gives special meaning to the character pairs <b>'\<'</b> and <b>'\>'</b>, namely 'match at the beginning of a word', and 'match at the end of a word'
+
;<b><nowiki>[:digit:]</nowiki></b> : correspond à n'importe quel caractère <b>0123456789</b>. C'est l'équivalent de <b>0-9</b>.
  
 +
;<b><nowiki>[:space:]</nowiki></b> : devrait correspondre à tout caractère d'espacement, incluant la tabulation ; cependant telle qu'elle est implémentée actuellement, elle correspond seulement à un espace. Notez que l'aide n'est pas exacte ici (''c'est le propos de l'[http://qa.openoffice.org/issues/show_bug.cgi?id=41706 issue 41706]'').
  
''For example:'' <b><nowiki>\<red</nowiki></b> matches red at the beginning of a word (she went <b>red</b>der than he did).
+
;<b><nowiki>[:print:]</nowiki></b> : devrait correspondre à n'importe quel caractère imprimable ; cependant, telle qu'elle est implémentée actuellement elle ne correspond pas aux guillemets simples ou doubles <b>‘ ’ “ ”</b> (et d'autres comme <b>« »</b>). Elle correspond à l'espace, mais ne correspond pas à une tabulation (cette dernière est le comportement espéré/défini). ''C'est le propos de l'[http://qa.openoffice.org/issues/show_bug.cgi?id=83290 issue 83290]''.
  
''For example:'' <b><nowiki>red\></nowiki></b> matches red at the end of a word (although neither of them ca<b>red</b> much.)
+
;<b><nowiki>[:cntrl:]</nowiki></b> : correspond à un caractère de contrôle. Dans la mesure où l'utilisateur est concerné, les documents OpenOffice.org ont très peu de caractères de contrôle, la tabulation et le retour à la ligne forcé correspondent tous deux, mais pas la marque de paragraphe.  
  
 +
;<b><nowiki>[:alpha:]</nowiki></b> : correspond à une lettre (incluant une lettre accentuée). Par exemple dans la phrase '<b>déjà vu</b>', les 6 lettres correspondront.
  
The test used to define the beginning/end of a word seems to be that the previous/next character is a space, underscore (_), tab, newline, paragraph mark or any non-alphanumeric character.
+
;<b><nowiki>[:alnum:]</nowiki></b> : correspond à un caractère qui satisfait aussi bien <b>[:alpha:]</b> que <b>[:digit:]</b>
  
''For example:'' <b><nowiki>\<red</nowiki></b> matches 'person@<b>red</b>iton.com'
+
;<b><nowiki>[:lower:]</nowiki></b> : correspond à une lettre en minuscule (y compris les lettres accentuées). La correspondance de la casse ne fonctionne pas à moins que la case <b>Respecter la casse</b> soit cochée. Si la case n'est ''pas'' cochée, l'expression est équivalente à <b>[:alpha:]</b>.
  
''For example:'' <b><nowiki>red\></nowiki></b> matches 'I said, "No-one da<b>red</b>" '
+
;<b><nowiki>[:upper:]</nowiki></b> : correspond à une lettre en majuscule (y compris les lettres accentuées). La correspondance de la casse ne fonctionne pas à moins que la case <b>Respecter la casse</b> soit cochée. Si la case n'est ''pas'' cochée, l'expression est équivalente à <b>[:alpha:]</b>.
  
 +
Il semble qu'il y ait peu de cohérence dans les implémentations des expressions POSIX entre crochets (dans OOo ou ailleurs). Une des approches est d'utiliser des classes de caractère directes - ainsi, au lieu de <b><nowiki>[[:digit:]]</nowiki></b> utilisez <b><nowiki>[0-9]</nowiki></b> par exemple.
  
== Alternative matches  |  [...==
+
== Groupement (...) et références arrières \x ==
The pipe character '<b>|</b>' is a special character which allows the expression either side of the '<b>|</b>' to match.
+
Les parenthèses '''( )''' sont utilisées pour grouper les caractères.
  
 +
''Par exemple'': '''cas(sure)''' trouvera '<b>cas</b>' et <b>cassure</b>' ; ici '''(sure)''' signifie 'un ou zéro de <b>sure</b>'.
  
''For example:'' <b>red|blue</b> matches <b>'red'</b> and <b>'blue'</b>
+
''Par exemple'': '''(cass|cés)ure''' trouvera à la fois '<b>cassure</b>' et '<b>césure</b>'.
  
 +
Chaque groupe entre les parenthèses est également défini comme une référence et peut être référé plus tard dans la même expression en utilisant une 'référence arrière'. La référence arrière '<b>\1</b>' signifie 'tout ce qui correspond dans la première paire de parenthèses' ; '<b>\2</b>' signifie 'tout ce qui correspond dans la seconde paire de parenthèses' ; et ainsi de suite.
  
Unfortunately, sometimes expressions separated by a pipe are not all evaluated, depending on the sequence.  This is the subject of [http://qa.openoffice.org/issues/show_bug.cgi?id=84828 issue 84828]
+
''Par exemple'' : '''(typo|topo)\1ogie''' trouvera '<b>typo typologie</b>' et '<b>topo topologie</b>', parce que '<b>\1</b> correspond à la fois à '''typo''' ou '''topo''', peu importe ce qui est trouvé. Cependant '<b>topo typologie</b>' ne correspond '''pas'''.  
  
 +
Notez que les '''références arrières ne doivent être utilisées que dans la zone 'Rechercher' '''actuellement et non dans la zone 'Remplacer par'.
  
''For example:'' <b>^red|blue</b> matches paragraphs beginning with <b>'red'</b> and any occurrence of <b>'blue'</b>, but <b>blue|^red</b> incorrectly matches only any occurrence of <b>'blue'</b>, failing to match paragraphs beginning with <b>'red'</b>
+
La cible pour l'implémentation des références arrières dans la zone 'Remplacer' par est la version [[OOoRelease24|OOo2.4]]. Un contournement est d'utiliser Tout rechercher, et d'immédiatement utiliser Rechercher & Remplacer de nouveau dans la sélection active uniquement. Cela devrait (ou pas) vous permettre de faire ce que vous souhaitez.
  
 +
''(note technique: [http://qa.openoffice.org/issues/show_bug.cgi?id=15666 issue 15666] couvre cela. Les références arrières dans la zone 'Remplacer par' utiliseront $1, $2, $3 etc. C'est cohérent avec la syntaxe perl et plus particulièrement avec le moteur de regex ICU qui devrait, à un moment, remplacer le moteur Regex existant de OOo et donc résoudre bien des problèmes)'''.
  
The open square brackets character <b>[</b> is a special character. Characters enclosed in square brackets are treated as alternatives - any one of them may match. You can also include ranges of characters, such as '''a-z''' or '''0-9''', rather than typing in '''abcdefghijklmnopqrstuvwxyz''' or '''0123456789'''
+
== Tabulations, nouvelles lignes, paragraphes  \t \n  $  ==
 +
La paire de caractères <b>'\t'</b> a une signification spéciale - elle correspond à un caractère de '''tabulation'''.
  
 +
''Par exemple'' : '''\tcas''' correspond à un caractère de '''tabulation''' suivi par le mot '<b>cas</b>'.
  
''For example:'' '''<nowiki>r[eo]d </nowiki>'''matches''' 'red' '''and''' 'rod'''' but not ''''rid''''
+
Dans Writer, une '''nouvelle ligne''' peut être saisie en pressant les touche Maj+Entrée. Un caractère de nouvelle ligne est ainsi inséré dans le texte et le texte suivant débute sur une nouvelle ligne. Ce n'est pas la même chose qu'un paragraphe ; appuyez sur l'icône ''Caractères non imprimable'' pour voir la différence.
  
''For example: '''''<nowiki>[m-p]ut</nowiki>''' matches ''''mut'''' and ''''nut'''' and ''''out'''' and ''''put''''
+
Le comportement des expressions régulières dans OpenOffice.org lors de la correspondance avec un caractère de nouvelle ligne ou une marque de paragraphe est 'inhabituel'. C'est en partie parce que les expressions régulières dans les autres logiciels gère en général du texte plein, alors que les expressions régulières dans OOo divisent le texte suivant les marques de paragraphe. Pour n'importe quel cas, voici ce que vous pouvez faire :
  
''For example: '''''<nowiki>[hm-p]ut</nowiki>''' matches ''''hut'''' and ''''mut'''' and ''''nut'''' and ''''out'''' and ''''put''''
+
* '''\n''' correspond à une nouvelle ligne (Maj+Entrée) si l'expression est entrée dans la zone Rechercher. Dans ce contexte, elle est simplement traitée comme un caractère, et peut être remplacés par, disons, un '''espace''' ou rien. L'expression régulière '''cas\n''' correspond à '''cas'''suivi par un caractère de nouvelle ligne - et s'il est remplacé par '''ces''' la nouvelle ligne sera également remplacée. L'expression régulière '''cas$''' correspondra à '<b>cas</b>' lorsqu'il est suivi par une nouvelle ligne. Dans ce cas, s'il est remplacé par <b>ces</b>, il ne remplacera que '<b>cas</b>' - et laissera la nouvelle ligne intacte.
  
 +
* '''rouge\nvert''' correspondra à '<b>rouge</b>' suivi par une nouvelle ligne suivi par '<b>vert</b>'; le remplacer par '<b>maron</b>' supprimera la nouvelle ligne. Cependant, aussi bien '''rouge.vert''' que '''rouge.*vert''' ne correspondra ici - le point '''.''' ne correspond pas à une nouvelle ligne.
 +
* '''$''' seule, correspond à une marque de paragraphe - et peut par exemple, être remplacé par un espace '<b>espace</b>', ou alors rien pour permettre de fusionner deux paragraphes. Notez que '''rouge$''' correspondra à '<b>rouge</b>' à la fin d'un paragraphe et si vous souhaitez le remplacer par exemple par un '''espace''', vous obtenez simplement une '''espace''' où '<b>rouge</b>' était - et les paragraphes ne sont pas affectés - la marque de paragraphe n'est pas remplacée. Cela peut aider de considérer '''$''' seul comme une syntaxe spéciale unique à OOo.
 +
* '''^$''' correspond à un paragraphe vide, qui peut être remplacé par rien par exemple, afin de supprimer un paragraphe vide. Notez que '''^rouge$''' correspond à un paragraphe avec seulement ''''rouge'''' à l'intérieur - le remplacer par rien laisse un paragraphe vide - la marque de paragraphe à la fin n'est pas remplacée. Cela peut aider de considérer '''^$''' seul comme une syntaxe spéciale unique à OOo. Malheureusement, dans la mesure où OOo a adopté cette syntaxe, il semble qu'il ne soit pas possible d'utiliser '''^$''' pour rechercher des cellules vides dans un tableau (ni des cellules vides dans Calc).
 +
* Si vous souhaitez remplacer chaque caractère de nouvelle ligne par une marque de paragraphe, vous devrez d'abord rechercher '''\n''' avec Tout rechercher pour sélectionner tous les caractères de nouvelle ligne. Puis, dans la zone Remplacer par, vous saisissez '''\n''', qui dans la zone Remplacer par correspond à une marque de paragraphe ; puis, choisissez Remplacer par. C'est bizarre, mais maintenant, au moins, vous le savez ;). Notez que \r est interprété comme un 'r' littéral et non comme un retour chariot.
  
Special characters within alternative match square brackets do not have the same special meanings. The only characters which do have special meanings are <b>]</b>, <b>-</b>, <b>^</b> and <b><nowiki>\</nowiki></b>, and the meanings are:
+
== Codes hexadécimaux \xXXXX ==
 +
La séquence de caractères ' <b>\x</b> suivi 'd'un nombre de 4 chiffres hexadécimaux' correspond au caractère du même code.
  
* <b>]</b> - a closing square bracket ends the alternative match set <b><nowiki>[abcdef]</nowiki></b>
+
''Par exemple :'' <b>\x002A</b> correspond au caractère '<b>*</b>'.
* <b>-</b> - a hyphen indicates a range of characters, as we've seen, eg <b><nowiki>[0-9]</nowiki></b>
+
* <b>^</b> - if the caret is the first character in the square brackets, it negates the search. ''For example'' <b><nowiki>[^a-dxyz]</nowiki></b> matches any character except <b>abcdxyz</b>.
+
* <b><nowiki>\</nowiki></b> - the backslash is used to allow <b>]</b>, <b>-</b>, <b>^</b> and <b><nowiki>\</nowiki></b> to be used literally in square brackets. ''For example'', <b>\]</b> stands for a literal closing square bracket, so <b>[[\]a]</b> will match an opening square bracket <b>[</b>, a closing square bracket <b>]</b> or an <b>a</b>. <b>\\</b> stands for a literal backslash.
+
  
Just to re-emphasise: these are the meanings of these characters inside square brackets, and any other characters are treated literally. ''For example'' <b>[\t ]</b> will match a backslash <b>\</b>, a '<b>t</b>' or a space - <b>not</b> a tab or a space.
+
Les codes hexadécimaux peuvent être vu dans la boîte de dialogue '''Insertion - Caractères spéciaux'''.
  
== POSIX bracket expressions [:alpha:] [:digit:] etc..  ==
+
== La zone 'Remplacer par' \t \n & ==
There is much confusion in the OpenOffice.org community about these. The Help itself is also far from clear.
+
Les utilisateurs s'interrogent parfois sur ce qui peut être fait dans la zone 'Remplacer par' de la boîte de dialogue Rechercher & remplacer.
  
There are a number of 'POSIX bracket expressions' (sometimes called 'POSIX character classes') available in OpenOffice.org regular expressions, of the form <b>[:classname:]</b> which allow a match with any of the characters in that class. For instance <b><nowiki>[:digit:]</nowiki></b> stands for any of the digits <b>0123456789</b>.
+
En général, les expressions régulières '''ne fonctionnent pas''' dans la zone 'Remplacer par'. Les caractères que vous saisissez remplacent le texte trouvé littéralement.
  
These (by definition) may <b>only appear inside the square brackets</b> of an alternative match - so a valid syntax would be <b><nowiki>[abc[:digit:]]</nowiki></b>, which should match '''a''', '''b''', '''c''', or any digit '''0-9'''. A correct syntax to match just any one digit would be <b><nowiki>[[:digit:]]</nowiki></b>.
+
Les trois constructions qui fonctionnent sont :
  
Unfortunately this does not work as it should! The correct syntax does not work at all, but currently an incorrect syntax <b><nowiki>([:digit:])</nowiki></b> will actually match a digit, as long as it is <b>outside</b> the  square brackets of an alternative match. (''Obviously this is unsatisfactory, and is the subject of [http://qa.openoffice.org/issues/show_bug.cgi?id=64368 issue 64368]'').
+
* '''\t''' insère une tabulation remplaçant le texte trouvé.
 +
* '''\n''' insère une marque de paragraphe remplaçant le texte trouvé. Cela peut sembler inattendu parce que '''\n''' dans la zone 'Rechercher' signifie 'nouvelle ligne'! Sur certains systèmes d'exploitation, il est possible d'utiliser une saisie unicode directement pour taper une nouvelle ligne de caractère (U+000A) dans la zone 'Remplacer par', fournissant ainsi un contournement, mais ce n'est pas universel.
 +
* '''&''' insère le texte trouvé en '''entier'''.
  
The POSIX bracket expressions available are listed below. Note that the exact definition of each depends on ''locale'' - for example in a different language other characters may be considered 'alphabetic letters' in [:alpha:]. The meanings given here apply generally to English-speaking locales (and do not take into account any Unicode issues).
+
''Par exemple'' si vous recherchez '''bird|berry''', vous trouverez à la fois '<b>bird</b>' et '<b>berry</b>'; maintenant remplacez-le par '''black&''' et vous trouverez à la fois '<b>blackbird</b>' ou <b>balckberry</b>.
  
;<b><nowiki>[:digit:]</nowiki></b> : stands for any of the digits <b>0123456789</b>. This is equivalent to <b>0-9</b>.
+
Notez que les références arrières ou sous correspondances telles que '''\1''', '''\2''' ne sont actuellement pas disponibles dans la zone 'Remplacer par' - voir la note dans la section [[#Groupement (...) et références arrières\x|Groupement et références arrières]].
  
;<b><nowiki>[:space:]</nowiki></b> : should stand for any whitespace character, including tab; however as currently implemented it stands simply for a space character. Note that the Help is currently misleading here. (''This is the subject of [http://qa.openoffice.org/issues/show_bug.cgi?id=41706 issue 41706]'').
+
== Règlement des problèmes avec les expressions régulières OOo ==
 +
Si vous débutez avec les expressions régulière, notez bien qu'elles peuvent être trompeuses - si vous n'obtenez pas le résultat escompté, vous devez alors vérifié que vous les comprenez bien. Essayez de garder ces expressions les plus simples et avec le moins d'ambitions possibles.
  
;<b><nowiki>[:print:]</nowiki></b> :  should stand for any printable character;  however as currently implemented it does not match the single quote nor the double quote characters <b>‘ ’ “ ”</b> (and some others such as  <b>« »</b>).  It matches space,  but does not match tab (this latter is expected/defined behaviour). (''This is the subject of [http://qa.openoffice.org/issues/show_bug.cgi?id=83290 issue 83290]'').
+
Voici quelques points intéressants sur les expressions régulières dans OOo :
  
;<b><nowiki>[:cntrl:]</nowiki></b> : stands for a control character. As far as a user is concerned, OpenOffice.org documents have very few control characters;  tab and hard_line_break are both matched, but paragraph_mark is not.
+
* Si vous rencontrez un comportement inattendu, vérifiez la section correspondante dans cet How-to - plusieurs problèmes de comportement ont été documentés ici.
 +
* Les expressions régulières sont 'gourmandes' - cela veut dire qu'elles vont faire correspondre le maximum de texte. Pensez à utiliser les parenthèses et les crochets ; ''par exemple'' <b>[^ ]{1,5}\></b> correspond à une plage de 1 à 5 caractères blancs à la fin d'un mot.
 +
* Soyez prudent lorsque vous utilisez le bouton '''Tout remplacer'''. Il y a quelques rares occasions où vous obtiendrez un résultat inattendu. Par exemple, pour supprimer le premier caractère de chaque paragraphe, vous saisirez dans la zone 'Rechercher' <b>^.</b> et ne mettrez rien dans la zone 'Remplacer par' ; cliquer sur Tout remplacer effacera *tout* votre texte au lieu du premier caractère de chaque paragraphe. L'[http://qa.openoffice.org/issues/show_bug.cgi?id=82473 Issue 82473] traite ce cas. Le contournement est de 'Tout trouver' puis de 'Remplacer par'. Peut-être que le comportement le plus sûr est de ne pas utiliser le bouton 'Tout remplacer' avec les expressions régulières.
  
;<b><nowiki>[:alpha:]</nowiki></b> : stands for a letter (including a letter with an accent). For example in the phrase (often used in English, and here given with accents as in the original language) '<b>déjà vu</b>'  all 6 letters will match.
+
== Trucs et astuces ==
 +
Voici quelques exemples qui peuvent être utiles :
  
;<b><nowiki>[:alnum:]</nowiki></b> : stands for a character that satisfies either <b>[:alpha:]</b> or <b>[:digit:]</b>
+
<tt>'''\<([^ ]+)[ ]+\1'''</tt>
 +
: trouve les doublons séparés par des espaces (notez qu'il y a un espace avant chaque <b>]</b>)
  
;<b><nowiki>[:lower:]</nowiki></b> : stands for a lowercase letter (including a letter with an accent). The case matching does not work unless the <b>Match case</b> box is ticked; if this box is ''not'' ticked this expression is equivalent to <b>[:alpha:]</b>.
+
<tt>'''\<[1-9][0-9]*\>'''</tt>
  
;<b><nowiki>[:upper:]</nowiki></b> : stands for an uppercase letter (including a letter with an accent). The case matching does not work unless the <b>Match case</b> box is ticked; if this box is ''not'' ticked this expression is equivalent to <b>[:alpha:]</b>.
+
: trouve les nombres décimaux
  
 +
<tt>'''[[:alpha:] \&]{1,}'''</tt>
  
There seems to be little consistency in any implementation of  POSIX bracket expressions (OOo or elsewhere). One approach is simply to use straightforward character classes - so instead of <b><nowiki>[[:digit:]]</nowiki></b> you use <b><nowiki>[0-9]</nowiki></b> for example.
+
: trouve tous les caractères alphabétiques, y compris ceux qui sont accentués
 
+
 
+
== Grouping (...) and backreferences \x ==
+
Round brackets '''( )''' may be used to group terms. 
+
 
+
 
+
''For example:'' '''red(den)?''' will find '<b>red</b>' and '<b>redden</b>'; here '''(den)?''' means 'one or zero of <b>den</b>'.
+
 
+
''For example:'' '''(blue|black)bird''' will find both '<b>bluebird</b>' and '<b>blackbird</b>'.
+
 
+
 
+
Each group enclosed in round brackets is also defined as a reference, and can be referred to later in the same expression using a 'backreference'. The backreference '<b>\1</b>' stands for 'whatever matched in the first round brackets'; '<b>\2</b>' stands for 'whatever matched in the second round brackets'; and so on.
+
 
+
 
+
''For example:'' '''(blue|black) \1bird''' will find both '<b>blue bluebird</b>' and '<b>black blackbird</b>', because '<b>\1</b>' stands for either '''blue''' or '''black''', whichever we found. Therefore '<b>black bluebird</b>' does '''not''' match.
+
 
+
 
+
Please note that '''backreferences may only be used in the 'Search for' box''' at present, not in the 'Replace with' box.
+
 
+
 
+
The target for implementation of backreferences in the 'Replace with' box is [[OOoRelease24|OOo2.4]]. A workaround until then is to use Find all, then immediately use Find/Replace again in the current selection only. This may (or may not) allow you to do what you want.
+
 
+
''(technical note: [http://qa.openoffice.org/issues/show_bug.cgi?id=15666 issue 15666] covers this. Backreferences in the 'Replace with' box will be $1, $2, $3 etc. This is consistent with perl syntax, and more particularly with the ICU regex engine, which may at some time replace the existing OOo regex engine, thus resolving many issues.)''
+
 
+
 
+
== Tabs, newlines, paragraphs  \t \n  $  ==
+
The character pair <b>'\t'</b> has special meaning - it stands for a '''tab''' character.
+
 
+
 
+
''For example:'' '''\tred''' will match a '''tab''' character followed by the word '<b>red</b>'.
+
 
+
 
+
In Writer a '''newline''' may be entered by pressing Shift-Enter. A newline character is thereby inserted into the text, and the following text starts on a new line. This is not the same as a new paragraph; click ''View-Non printing characters'' to see the difference.
+
 
+
 
+
The OOo regular expression behaviour when matching paragraph marks and newline characters is 'unusual'. This is partly because regular expressions in other software usually deal with ordinary plain text, whereas OOo regular expressions divide the text at paragraph marks. For whatever reason, this is what you can do:
+
 
+
 
+
* '''\n''' will match a newline (Shift-Enter) if it is entered in the Search box. In this context it is simply treated like a character, and can be replaced by say a '''space''', or nothing. The regular expression '''red\n''' will match '''red''' followed by a newline character - and if replaced simply by say '''blue''' the newline will also be replaced. The regular expression '''red$''' will match '<b>red</b>' when it is followed by a newline. In this case, replacing with '<b>blue</b>' will only replace '<b>red</b>' - and will leave the newline intact.
+
* '''red\ngreen''' will match '<b>red</b>' followed by a newline followed by '<b>green</b>'; replacing with say '<b>brown</b>' will remove the newline. However neither '''red.green''' nor '''red.*green''' will match here - the dot '''.''' does not match newline.
+
* '''$''' on its own will match a paragraph mark - and can be replaced by say a '<b>space</b>', or indeed nothing, in order to merge two paragraphs together. Note that '''red$''' will match '<b>red</b>' at the end of a paragraph, and if you replace it with say a '''space''', you simply get a '''space''' where '<b>red</b>' was - and the paragraphs are unaffected - the paragraph mark is not replaced. It may help to regard '''$''' on its own as a special syntax, unique to OOo.
+
* '''^$''' will match an empty paragraph, which can be replaced by say nothing, in order to remove the empty paragraph. Note that '''^red$''' matches a paragraph with only ''''red'''' in it - replacing this with nothing leaves an empty paragraph - the paragraph marks at either end are not replaced. It may help to regard '''^$''' on its own as a special syntax, unique to OOo. Unfortunately, because OOo has taken over this syntax, it seems you cannot use '''^$''' to find empty cells in a table (nor empty Calc cells).
+
* If you wish to replace every newline with a paragraph mark, firstly you will search for '''\n''' with Find All to select the newlines. Then in the Replace box you enter '''\n''', which in the Replace box stands for a paragraph mark; then choose Replace. This is somewhat bizarre, but at least now you know. Note that \r is interpreted as a literal 'r', not a carriage return.
+
 
+
 
+
== Hexadecimal codes \xXXXX ==
+
The character sequence ' <b>\x</b> then a 4 digit hexadecimal number ' stands for the character with that code.
+
 
+
''For example:'' <b>\x002A</b> stands for the star character '<b>*</b>'.
+
 
+
Hexadecimal codes can be seen on the ''''Insert-Special Character'''' dialog.
+
 
+
 
+
== The 'Replace with' box \t \n & ==
+
Users are sometimes confused with what can be done using the 'Replace with' box in a Find & Replace dialog.
+
 
+
In general, regular expressions '''do not work''' in the 'Replace with' box. The characters you type replace the found text literally.
+
 
+
The three constructs that do work are:
+
 
+
* '''\t''' inserts a tab, replacing the text found.
+
* '''\n''' inserts a paragraph mark, replacing the text found. This may be unexpected, because '''\n''' in the 'Search for' box means 'newline'! In some operating systems it is possible to use unicode input to directly type a newline character (U+000A) in the 'Replace with' box, providing a workaround, but this is not universal.
+
* '''&''' inserts the '''entire''' text found.
+
 
+
''For example'' if you searched for '''bird|berry''', you would would find either '<b>bird</b>' or '<b>berry</b>'; now to replace with '''black&''' would give you either '<b>blackbird</b>' or '<b>blackberry</b>'.
+
 
+
Please note that backreferences or sub-matches such as '''\1''', '''\2''' are not available in the 'Replace with' box yet - see note under the [[#Grouping (...) and backreferences \x|Grouping and backreferences]] section above.
+
 
+
== Troubleshooting OOo regular expressions ==
+
If you are new to regular expressions, please realise that they can be tricky - if you are not getting the results you expect, you might need to check that you understand well enough. Try to keep regular expressions as simple and unambitious as possible.
+
 
+
 
+
Here are some further points of interest with OOo regular expressions:
+
 
+
* If you find an unexpected behaviour, please check in the relevant section in this HowTo - many of the behaviour issues have been documented here.
+
* Regular expressions are 'greedy' - that is they will match as much text as they can. Consider using curly and square brackets; ''for example'' <b>[^ ]{1,5}\></b> matches 1 to 5 non-space characters at the end of a word.
+
* Please be careful when using the '''Replace All''' button. There are a few rare occasions when this will give unexpected results. For example to remove the first character of every paragraph you might 'Search for' <b>^.</b> and 'Replace with' nothing; clicking 'Replace All' now will wipe out *all* your text, instead of just the first character of each paragraph. [http://qa.openoffice.org/issues/show_bug.cgi?id=82473 Issue 82473] discusses this. The workaround is to 'Find All', then 'Replace'; perhaps the safest way is not to use the 'Replace All' button at all with regular expressions.
+
 
+
 
+
== Tips and Tricks ==
+
Here are some examples that may be useful:
+
 
+
<tt>'''\<([^ ]+)[ ]+\1'''</tt>
+
: finds duplicate words separated by spaces (note that there is a space before each <b>]</b>)
+
 
+
<tt>'''\<[1-9][0-9]*\>'''</tt>
+
 
+
: finds decimal numbers
+
  
 
<tt>'''\<0[0-7]*\>'''</tt>
 
<tt>'''\<0[0-7]*\>'''</tt>
: finds octal  (base 8) numbers
+
: trouve les nombres octaux (base 8)
  
 
<tt>'''\<0x[A-Fa-f0-9]+\>'''</tt>
 
<tt>'''\<0x[A-Fa-f0-9]+\>'''</tt>
: finds hexadecimal (base 16) numbers
+
: trouve les nombres hexadécimaux (base 16)
  
 
<tt>'''[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-z]{2,6}'''</tt>
 
<tt>'''[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-z]{2,6}'''</tt>
: finds <u>most</u> email addresses (there is no perfect regular expression - this is a practical solution)
+
: trouve la <u>plupart</u> des adresses email (il n'y a pas d'expressions régulières parfaites - c'est une solution pratique)
  
== External Links ==
+
== Liens externes ==
* [http://www.icu-project.org/userguide/regexp.html The ICU regular expression package], a candidate to replace the existing OOo regular expression engine (see: [[Regexp]]).
+
* [http://www.icu-project.org/userguide/regexp.html The ICU regular expression package], un candidat au remplacement du moteur des expressions régulières existantes dans OOo (voir : [[Regexp]]).
 
* [http://www.OOoNinja.com/2007/12/example-regular-expressions-for-writer.html Example regular expressions] (OpenOffice.org Ninja)
 
* [http://www.OOoNinja.com/2007/12/example-regular-expressions-for-writer.html Example regular expressions] (OpenOffice.org Ninja)
 
* [http://www.OOoNinja.com/2007/12/backreferences-in-replacements-new.html Backreferences in substitutions] (OpenOffice.org Ninja)
 
* [http://www.OOoNinja.com/2007/12/backreferences-in-replacements-new.html Backreferences in substitutions] (OpenOffice.org Ninja)
 
* [http://www.oooninja.com/2007/12/powerful-text-matching-with-regular.html Guide to regular expressions in OpenOffice.org] (OpenOffice.org Ninja)
 
* [http://www.oooninja.com/2007/12/powerful-text-matching-with-regular.html Guide to regular expressions in OpenOffice.org] (OpenOffice.org Ninja)
 +
 +
  
 
[[en:Documentation/How_Tos/Regular_Expressions_in_Writer]]
 
[[en:Documentation/How_Tos/Regular_Expressions_in_Writer]]
 +
 +
[[Category:FR/Documentation/Writer|Expressions régulières]]

Latest revision as of 12:19, 21 June 2017


Documentation beingedited.png
Cette page est en cours d'édition


Introduction

En termes simples, les expressions régulières sont une façon plus efficace de trouver et de remplacer du texte (comme avec les caractères génériques). Les expressions régulières peuvent être puissantes et complexes et il est facile pour des utilisateurs inexpérimentés de commettre des erreurs. Nous décrivons l'utilisation des expressions régulières dans OpenOffice.org en essayant d'être le plus clair possible pour le novice, tout en détaillant les aspects qui peuvent provoquer la confusion des utilisateurs plus expérimentés.

Une utilisation typique d'expression régulière est la recherche de texte dans un document Writer ; par exemple pour localiser toutes les occurences de me ou de femme dans le document, vous pouvez alors faire une recherche et utiliser des expressions régulières qui trouveront les deux mots

Les expressions régulières sont très communes dans certains environnements informatique et sont plus connues sous le nom de regex ou regexp. Toutes les regex ne sont pas les mêmes, ainsi lire le manuel les concernant peut se révéler pertinent.

Utilisation des expressions régulières dans OOo

Dans Writer:

  • Dans la boîte de dialogue Édition - Rechercher & remplacer


Recherche & remplacer.png


  • Avec la commande Édition - Modification - Accepter/rejeter (onglet Filtre)


Dans Calc:

  • Dans la boîte de dialogue Édition - Rechercher & remplacer
  • Dans la boîte de dialogue Données - Filtre - Filtre standard
  • Avec les fonctions, telles que SOMME.SI, RECHERCHE


Dans Base:

  • Avec la commande Rechercher un enregistrement

La boîte de dialogue qui apparaît lorsque vous utilisez la commande ci-dessus possède généralement une option d'utilisation des expressions régulières (qui est désactivée par défaut). Par exemple :


location of regular expression tick box


Vous devez vérifier le statut des expressions régulières à chaque fois que vous appelez la boîte de dialogue puisque son comportement par défaut est d'être désactivée.

Un exemple simple

Si vous n'avez pas ou peu d'expérience avec les expressions régulières, vous trouverez sans doute plus simple de les étudier à travers Writer qu'à travers Calc.

Dans Writer, appelez la boîte de dialogue Rechercher & remplacer à partir du menu Édition.

Dans la boîte de dialogue, choisissez Autres options et cochez la case Expressions régulières.

Dans la zone Rechercher, saisissez c.s - le point signifie ici 'n'importe quel caractère'.

Cliquer sur le bouton Tout trouver, trouvera tous les mots dont le c est suivi par une autre caractère et suivi par un s, par exemple ces ou 'encas' ou 'incise' ou 'fac similé' (ce dernier exemple est un c suivi par un espace suivi par un s - l'espace est un caractère.

Si vous saisissez xxx dans la zone Remplacer par et cliquez sur le bouton Tout remplacer, cela devient 'xxx', 'enxxx, 'inxxxse, faxxxsimilé'

Ce n'est peut-être pas très utile, mais montre le principe. Nous allons continuer à utiliser la boîte de dialogue Rechercher et remplacer pour expliquer plus en détail.

Le minimum à savoir à propos des expressions régulières

Si vous ne voulez pas savoir exactement comment fonctionnent les expressions régulières, mais voulez seulement obtenir un résultat, vous trouverez utiles les exemples suivants. Saisissez les dans la zone Rechercher et assurez-vous que la case Expressions régulières est cochée.

  • blanc|blanche trouve blanc et blanche
  • b.rde trouve b puis n'importe quel caractère, puis rde - ex barde, briarde, et borde
  • b[ao]nde trouve bande et bonde - [ao] signifie aussi bien a que o
  • changer? renvoie change and changer - le r est facultatif puisqu'il est suivi par un point d'interrogation.
  • s\> trouve le s a la fin d'un mot.
  • \<. trouve la première lettre d'un mot.
  • ^. trouve la première lettre d'un paragraphe.
  • ^$ trouve un paragraphe vide.

Comment sont appliquées les expressions régulières dans OpenOffice.org

Les expressions régulières dans OpenOffice.org divisent le texte à rechercher en portions et examinent chaque portion séparément.

Dans Writer, le texte apparaît séparé en paragraphes. Par exemple x.*z ne correspondra pas à x à la fin d'un paragraphe avec z commençant le paragraphe suivant (x.*z signifie x puis n'importe quels caractères puis z). Les paragraphes semblent être traités séparément (bien que nous parlerons de certains cas spéciaux à la fin de cet how-to).


the scope of regular expressions

De plus Writer considère chaque cellule de tableau et chaque cadre de texte séparément. Les cadres de texte sont examinés après que tout autre texte ou cellules de tableau sur toutes les pages aient été examinés.

Dans la boîte de dialogue Rechercher & remplacer, les expressions régulières doivent être utilisées dans la zone Rechercher. En général, elles ne doivent pas être utilisées dans la zone Remplacer par. Les exceptions sont discutées plus loin.

Caractères littéraux

Si les expressions régulières utilisées contiennent des caractères autres que ceux appelés 'caractères spéciaux' . ^ $ * + ? \ [ ( { | alors ces caractères correspondent littéralement.

Par exemple : bord correspondra à bord, 'rebord et 'déborder'.

OpenOffice.org vous permet de choisir si vous devez respecter les caractères en 'MAJUSCULE' ou en 'miniscule' dans la rechercher. Si vous cochez la case 'Respecter la casse' dans la boîte de dialogue Rechercher & remplacer, alors bord ne correspondra pas à Bord ou REBORD ; si vous décochez cette case, alors la casse est ignorée et les deux écritures seront trouvées.

Les caractères spéciaux

Les caractères spéciaux sont . ^ $ * + ? \ [ ( { |

Ils ont une signification particulière dans une expression régulière, comme nous allons le décrire.

Si vous souhaitez rechercher un de ces caractères littéralement, placez un backslash '\' avant celui-ci.


Par exemple : pour trouver $100 utilisez \$100 - le \$ est pris pour le caractère $ .

Caractère seul correspondant au .  ?

Le caractère spécial '.' correspond à n'importe quel caractère seul (excepté sur les nouvelles lignes).

Par exemple : c.s correspond à 'ces' and 'encas' et 'inciser' et 'fac similé'

Le caractère spécial point d'interrogation '?' signfie 'correspond à zéro ou à un des caractères précédents' - ou 'correspond au caractère précédent s'il est trouvé'.

Par exemple : lie?n correspond à 'lin' et 'lien' - 'a?' signifie 'correspond à un seul s'il y en a un'.

Les caractères spéciaux peuvent être utilisés en combinaisons avec d'autres. Un point suivi d'un point d'interrogation signifie 'correspond à zéro ou l'un des caractères seuls'.

Par exemple : star.?ing correspond à 'staring', 'starring', 'starting', et 'starling', mais pas 'startling'

Répéter une correspondance + * {m,n}

Le caractère spécial '+' signifie 'correspond à un ou plus des caractères précédents'.

Par exemple : ce+s correspond à 'ces' et 'cees' et 'ceeeees' - e+ signifie correspond à un ou plus e's.

Le caractère spécial étoile '*' signifie 'correspond à zéro ou à plus des caractères précédents'.

Par exemple : lie*n corresond à 'lin' et 'lien' et 'lieeeen' - 'a*' signifie correspond à zéro ou plus de a's .

Une utilisation courante de '*' est après le caractère point. - ie '.*' qui signifie 'n'importe lequel ou pas de caractère'.

Par exemple : lie.*n correspond a 'lien' et à 'lieXn' et à lieYYYYn mais pas à - 'lin' ou 'liXn'.

Utilisez l'étoile '*' avec précautions ; elle va récupérer tout ce qu'elle peut :

Par exemple : 'l.*n' correspond à lien mais dans Writer, si la paragraphe est actuellement 'Une vendeuse lui a montré le lien marron', la correspondance trouvée est lui a montré le lien marron - à savoir, le premier 'l' et le dernier 'n' possible. Les expressions régulières sont gourmandes par nature.

Vous devez spécifier combien de fois la correspondance doit être répétée, avec des accolades { }. Par exemple a{1,4}rgh! correspondra à argh!, aargh!, aaargh! et aaaargh! - en d'autres termes entre 1 et 4 a puis rgh!.

Notez également que a{3}rgh! correspondra exactement à 3 a, ie aaargh! et a{2,}rgh! (avec une virgule) correspondra à au moins 2 a, par exemple aargh! et aaaaaaaargh!.

Correspondance de position ^ $ \< \>

Le caractère spécial accent circonflexe '^' signifie 'correspond au début du texte'.

Le caractère spécial '$' signifie 'correspond à la fin du texte'.

Souvenez-vous que les expressions régulières d'OpenOffice.org divisent le texte à rechercher - chaque paragraphe de Writer est examiné de façon séparée.

Par exemple : ^cas correspond à 'cas' au début d'un paragraphe (Cas à étudier...).

Par exemple : cas$ correspond à 'cas' à la fin d'un paragraphe (Étude de cas).

Par exemple : ^cas$ correspond à une cellule de tableau ne contenant que 'cas'.

De plus, un retour à la ligne forcé (saisi par Maj+Entrée) est considéré comme le début ou la fin d'un texte et autorisera la correspondance avec ^ et $.

Le caractère spécial backslash '\' donne une signification spéciale à la paire de caractères '\<' et '\>', c'est à dire 'correspond au début d'un mot' et 'correspond à la fin d'un mot.

Par exemple : \<cas correspond à 'cas' au début d'un mot (il prend le casier près de la porte).

Par exemple : cas\> correspond à 'cas' à la fin d'un mot (il prend un encas pour le déjeuner).

Le test utilisé pour définir le début ou la fin d'un mot semble être que le caractère précédent ou suivant est un espace, un caractère de soulignage (_), une tabulation, une nouvelle ligne, une marque de paragraphe ou n'importe quel caractère non alphanumérique.

Par exemple : \<cas correspond à 'personne@cassis.com'

Par exemple : cas\> correspond à 'Je lui ai dit "N'oublie pas ton encas"'

Correspondances alternatives | [...]

Le caractère spécial pipe '|' permet de rechercher la correspondance de l'expression '|' de chaque côté.

Par exemple : rouge|bleu correspond à 'rouge' et 'bleu'

Malheureusement, parfois, les expressions régulières séparées par un caractère pipe ne sont pas évaluées en fonction de la séquence. C'est le sujet de l'issue issue 84828

Par exemple : ^rouge|bleu correspond à des paragraphes commençant par ^'rouge' et n'importe quelle occurrence de ^'bleu', mais ^bleu|^rouge correspond de façon incorrecte aux occurrences de ^'bleu', et oublie de correspondre aux paragraphes commençant par ^'rouge'.

Le crochet ouvert [ est un caractère spécial. Les caractères entourés de crochets sont traités comme des alternatives - n'importe lequel d'entre eux peut correspondre. Vous pouvez également inclure des plages de caractères comme a-z ou 0-9 plutôt que saisir abcdefghijklmnopqrstuvwxyz ou 0123456789.

Par exemple : c[ea]s correspond à 'ces' et 'cas' mais pas à 'cos' .

Par exemple : [m-p]ue correspond à 'mue' et 'nue' et 'oue' et 'pue'

Par exemple : [hm-p]ue correspond à 'hue' et 'mue' et 'nue' et 'oue' et 'pue'

Les caractères spéciaux utilisés à travers les crochets n'ont pas la même signification spéciale. Les seuls caractères qui ont une signification spéciale sont ], -, ^ et \ et leur signification est :


  • ] - un crochet fermant termine l'ensemble de correspondance alternative [abcdef]
  • - - un tiret indique une plage de caractères comme nous l'avons vu dans [0-9]
  • ^ - si l'accent circonflexe est le premier caractère dans les crochets, il interdit la recherche sur ces caractères. Par exemple [^a-dxyz] correspond à n'importe quel caractères sauf abcdxyz.
  • \ - le backslash est utilisé pour permettre à ], -, ^ et \ d'être utlisés littéralement entre les crochets. Par exemple \]] correspond à un crochet fermant littéral, ainsi [[\]a] correspondra à un crochet ouvrant [, un crochet fermant ] ou un a. \\ correspond à un backslash littéral.

Pour insister : Ceci est la signification de ces caractères à l'intérieur des crochets, et n'importe quel autre caractère est traité littéralement. Par exemple [\t ] correspondra à un backslash \, un 't' ou à un espace - pas à une tabulation ou à un espace.

Les expressions POSIX entre crochets [:alpha:] [:digit:] etc..

Il y a une grande confusion dans la communauté OpenOffice.org à propos de ces expressions. L'aide, elle-même, n'est pas très claire.

Il y a beaucoup d'expressions 'POSIX entre crochets' (parfois appelées classes de caractère POSIX) disponibles dans les expressions régulières d'OpenOffice.org, sous la forme de [:nomclasse:] qui autorisent une correspondance avec n'importe quel caractère de cette classe. Par exemple [:digit:] signifie n'importe quel nombre 0123456789.

Celles-ci (par définition) ne peuvent qu'apparaître à l'intérieur des crochets d'une correspondance alternative - donc une syntaxe correcte est de la forme [abc[:digit:]], qui correspond à a, b, c ou n'importe quel nombre de 0-9. Une syntaxe correcte correspondant à un seul nombre est de la forme [[:digit:]].

Malheureusement, cela ne fonctionne pas comme il devrait ! La syntaxe correcte ne fonctionne pas du tout, mais à l'heure actuelle une syntaxe incorrecte de la forme ([:digit:]) correspondra à un nombre dans la mesure où il est en dehors des crochets d'une correspondance alternative (évidemment, ce n'est pas satisfaisant et le propos de l'issue 64368).

Les expressions POSIX entre crochets disponibles sont listées ci-dessous. Notez que la définition exacte de chacune dépend des paramètres locaux - par exemple dans une autre langue, certains caractères peuvent être considérés comme des lettres alphabétiques pour [:alpha:]. La signification donnée ici s'applique généralement à des paramètres de langue anglaise (et ne prend pas en compte les problèmes Unicode).

[:digit:] 
correspond à n'importe quel caractère 0123456789. C'est l'équivalent de 0-9.
[:space:] 
devrait correspondre à tout caractère d'espacement, incluant la tabulation ; cependant telle qu'elle est implémentée actuellement, elle correspond seulement à un espace. Notez que l'aide n'est pas exacte ici (c'est le propos de l'issue 41706).
[:print:] 
devrait correspondre à n'importe quel caractère imprimable ; cependant, telle qu'elle est implémentée actuellement elle ne correspond pas aux guillemets simples ou doubles ‘ ’ “ ” (et d'autres comme « »). Elle correspond à l'espace, mais ne correspond pas à une tabulation (cette dernière est le comportement espéré/défini). C'est le propos de l'issue 83290.
[:cntrl:] 
correspond à un caractère de contrôle. Dans la mesure où l'utilisateur est concerné, les documents OpenOffice.org ont très peu de caractères de contrôle, la tabulation et le retour à la ligne forcé correspondent tous deux, mais pas la marque de paragraphe.
[:alpha:] 
correspond à une lettre (incluant une lettre accentuée). Par exemple dans la phrase 'déjà vu', les 6 lettres correspondront.
[:alnum:] 
correspond à un caractère qui satisfait aussi bien [:alpha:] que [:digit:]
[:lower:] 
correspond à une lettre en minuscule (y compris les lettres accentuées). La correspondance de la casse ne fonctionne pas à moins que la case Respecter la casse soit cochée. Si la case n'est pas cochée, l'expression est équivalente à [:alpha:].
[:upper:] 
correspond à une lettre en majuscule (y compris les lettres accentuées). La correspondance de la casse ne fonctionne pas à moins que la case Respecter la casse soit cochée. Si la case n'est pas cochée, l'expression est équivalente à [:alpha:].

Il semble qu'il y ait peu de cohérence dans les implémentations des expressions POSIX entre crochets (dans OOo ou ailleurs). Une des approches est d'utiliser des classes de caractère directes - ainsi, au lieu de [[:digit:]] utilisez [0-9] par exemple.

Groupement (...) et références arrières \x

Les parenthèses ( ) sont utilisées pour grouper les caractères.

Par exemple: cas(sure) trouvera 'cas' et cassure' ; ici (sure) signifie 'un ou zéro de sure'.

Par exemple: (cass|cés)ure trouvera à la fois 'cassure' et 'césure'.

Chaque groupe entre les parenthèses est également défini comme une référence et peut être référé plus tard dans la même expression en utilisant une 'référence arrière'. La référence arrière '\1' signifie 'tout ce qui correspond dans la première paire de parenthèses' ; '\2' signifie 'tout ce qui correspond dans la seconde paire de parenthèses' ; et ainsi de suite.

Par exemple : (typo|topo)\1ogie trouvera 'typo typologie' et 'topo topologie', parce que '\1 correspond à la fois à typo ou topo, peu importe ce qui est trouvé. Cependant 'topo typologie' ne correspond pas.

Notez que les références arrières ne doivent être utilisées que dans la zone 'Rechercher' actuellement et non dans la zone 'Remplacer par'.

La cible pour l'implémentation des références arrières dans la zone 'Remplacer' par est la version OOo2.4. Un contournement est d'utiliser Tout rechercher, et d'immédiatement utiliser Rechercher & Remplacer de nouveau dans la sélection active uniquement. Cela devrait (ou pas) vous permettre de faire ce que vous souhaitez.

(note technique: issue 15666 couvre cela. Les références arrières dans la zone 'Remplacer par' utiliseront $1, $2, $3 etc. C'est cohérent avec la syntaxe perl et plus particulièrement avec le moteur de regex ICU qui devrait, à un moment, remplacer le moteur Regex existant de OOo et donc résoudre bien des problèmes)'.

Tabulations, nouvelles lignes, paragraphes \t \n $

La paire de caractères '\t' a une signification spéciale - elle correspond à un caractère de tabulation.

Par exemple : \tcas correspond à un caractère de tabulation suivi par le mot 'cas'.

Dans Writer, une nouvelle ligne peut être saisie en pressant les touche Maj+Entrée. Un caractère de nouvelle ligne est ainsi inséré dans le texte et le texte suivant débute sur une nouvelle ligne. Ce n'est pas la même chose qu'un paragraphe ; appuyez sur l'icône Caractères non imprimable pour voir la différence.

Le comportement des expressions régulières dans OpenOffice.org lors de la correspondance avec un caractère de nouvelle ligne ou une marque de paragraphe est 'inhabituel'. C'est en partie parce que les expressions régulières dans les autres logiciels gère en général du texte plein, alors que les expressions régulières dans OOo divisent le texte suivant les marques de paragraphe. Pour n'importe quel cas, voici ce que vous pouvez faire :

  • \n correspond à une nouvelle ligne (Maj+Entrée) si l'expression est entrée dans la zone Rechercher. Dans ce contexte, elle est simplement traitée comme un caractère, et peut être remplacés par, disons, un espace ou rien. L'expression régulière cas\n correspond à cassuivi par un caractère de nouvelle ligne - et s'il est remplacé par ces la nouvelle ligne sera également remplacée. L'expression régulière cas$ correspondra à 'cas' lorsqu'il est suivi par une nouvelle ligne. Dans ce cas, s'il est remplacé par ces, il ne remplacera que 'cas' - et laissera la nouvelle ligne intacte.
  • rouge\nvert correspondra à 'rouge' suivi par une nouvelle ligne suivi par 'vert'; le remplacer par 'maron' supprimera la nouvelle ligne. Cependant, aussi bien rouge.vert que rouge.*vert ne correspondra ici - le point . ne correspond pas à une nouvelle ligne.
  • $ seule, correspond à une marque de paragraphe - et peut par exemple, être remplacé par un espace 'espace', ou alors rien pour permettre de fusionner deux paragraphes. Notez que rouge$ correspondra à 'rouge' à la fin d'un paragraphe et si vous souhaitez le remplacer par exemple par un espace, vous obtenez simplement une espace où 'rouge' était - et les paragraphes ne sont pas affectés - la marque de paragraphe n'est pas remplacée. Cela peut aider de considérer $ seul comme une syntaxe spéciale unique à OOo.
  • ^$ correspond à un paragraphe vide, qui peut être remplacé par rien par exemple, afin de supprimer un paragraphe vide. Notez que ^rouge$ correspond à un paragraphe avec seulement 'rouge' à l'intérieur - le remplacer par rien laisse un paragraphe vide - la marque de paragraphe à la fin n'est pas remplacée. Cela peut aider de considérer ^$ seul comme une syntaxe spéciale unique à OOo. Malheureusement, dans la mesure où OOo a adopté cette syntaxe, il semble qu'il ne soit pas possible d'utiliser ^$ pour rechercher des cellules vides dans un tableau (ni des cellules vides dans Calc).
  • Si vous souhaitez remplacer chaque caractère de nouvelle ligne par une marque de paragraphe, vous devrez d'abord rechercher \n avec Tout rechercher pour sélectionner tous les caractères de nouvelle ligne. Puis, dans la zone Remplacer par, vous saisissez \n, qui dans la zone Remplacer par correspond à une marque de paragraphe ; puis, choisissez Remplacer par. C'est bizarre, mais maintenant, au moins, vous le savez ;). Notez que \r est interprété comme un 'r' littéral et non comme un retour chariot.

Codes hexadécimaux \xXXXX

La séquence de caractères ' \x suivi 'd'un nombre de 4 chiffres hexadécimaux' correspond au caractère du même code.

Par exemple : \x002A correspond au caractère '*'.

Les codes hexadécimaux peuvent être vu dans la boîte de dialogue Insertion - Caractères spéciaux.

La zone 'Remplacer par' \t \n &

Les utilisateurs s'interrogent parfois sur ce qui peut être fait dans la zone 'Remplacer par' de la boîte de dialogue Rechercher & remplacer.

En général, les expressions régulières ne fonctionnent pas dans la zone 'Remplacer par'. Les caractères que vous saisissez remplacent le texte trouvé littéralement.

Les trois constructions qui fonctionnent sont :

  • \t insère une tabulation remplaçant le texte trouvé.
  • \n insère une marque de paragraphe remplaçant le texte trouvé. Cela peut sembler inattendu parce que \n dans la zone 'Rechercher' signifie 'nouvelle ligne'! Sur certains systèmes d'exploitation, il est possible d'utiliser une saisie unicode directement pour taper une nouvelle ligne de caractère (U+000A) dans la zone 'Remplacer par', fournissant ainsi un contournement, mais ce n'est pas universel.
  • & insère le texte trouvé en entier.

Par exemple si vous recherchez bird|berry, vous trouverez à la fois 'bird' et 'berry'; maintenant remplacez-le par black& et vous trouverez à la fois 'blackbird' ou balckberry.

Notez que les références arrières ou sous correspondances telles que \1, \2 ne sont actuellement pas disponibles dans la zone 'Remplacer par' - voir la note dans la section Groupement et références arrières.

Règlement des problèmes avec les expressions régulières OOo

Si vous débutez avec les expressions régulière, notez bien qu'elles peuvent être trompeuses - si vous n'obtenez pas le résultat escompté, vous devez alors vérifié que vous les comprenez bien. Essayez de garder ces expressions les plus simples et avec le moins d'ambitions possibles.

Voici quelques points intéressants sur les expressions régulières dans OOo :

  • Si vous rencontrez un comportement inattendu, vérifiez la section correspondante dans cet How-to - plusieurs problèmes de comportement ont été documentés ici.
  • Les expressions régulières sont 'gourmandes' - cela veut dire qu'elles vont faire correspondre le maximum de texte. Pensez à utiliser les parenthèses et les crochets ; par exemple [^ ]{1,5}\> correspond à une plage de 1 à 5 caractères blancs à la fin d'un mot.
  • Soyez prudent lorsque vous utilisez le bouton Tout remplacer. Il y a quelques rares occasions où vous obtiendrez un résultat inattendu. Par exemple, pour supprimer le premier caractère de chaque paragraphe, vous saisirez dans la zone 'Rechercher' ^. et ne mettrez rien dans la zone 'Remplacer par' ; cliquer sur Tout remplacer effacera *tout* votre texte au lieu du premier caractère de chaque paragraphe. L'Issue 82473 traite ce cas. Le contournement est de 'Tout trouver' puis de 'Remplacer par'. Peut-être que le comportement le plus sûr est de ne pas utiliser le bouton 'Tout remplacer' avec les expressions régulières.

Trucs et astuces

Voici quelques exemples qui peuvent être utiles :

\<([^ ]+)[ ]+\1

trouve les doublons séparés par des espaces (notez qu'il y a un espace avant chaque ])

\<[1-9][0-9]*\>

trouve les nombres décimaux

[[:alpha:] \&]{1,}

trouve tous les caractères alphabétiques, y compris ceux qui sont accentués

\<0[0-7]*\>

trouve les nombres octaux (base 8)

\<0x[A-Fa-f0-9]+\>

trouve les nombres hexadécimaux (base 16)

[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-z]{2,6}

trouve la plupart des adresses email (il n'y a pas d'expressions régulières parfaites - c'est une solution pratique)

Liens externes

Personal tools
In other languages