2009-08-31 6 views
1

Je suis en train de déterminer quels sont les critères de correspondance de motif suivant me permet d'entrer:Comprendre les critères regex en correspondance de motif

\s*([\w\.-]+)\s*=\s*('[^']*'|"[^"]*"|[^\s]+) 

De ma tentative de déchiffrer (en regardant les regex que je ne comprends), il semble dis que je peux commencer avec n'importe quelle séquence de caractères puis je dois avoir une accolade suivie d'alphanumériques, puis une autre séquence suivie d'accolades, une citation unique initiale, pas d'antislashs fermés par une accolade ??? Je suis désolé si je suis complètement embrouillé ici. Toute aide est appréciée.

Cordialement, Pablo

+0

Vous devez remplacer '[^ \ s] +' par '[^ \ s>] +'. – Gumbo

Répondre

2

Les crochets sont des classes de caractères, et les parens sont pour le regroupement. Je ne suis pas sûr de ce que vous voulez dire par "accolades". Ceci correspond fondamentalement à une paire nom = valeur où le nom est constitué d'un ou plusieurs caractères "mot", point ou trait d'union, et la valeur est soit un caractère entre guillemets, soit une chaîne de caractères entre guillemets, ou un groupe de caractères non-espaces. Les caractères entre guillemets simples ne peuvent pas contenir de guillemets simples, et les guillemets entre guillemets doubles ne peuvent pas contenir de guillemets doubles (les deux fautes sans doute mineures, quelle que soit la syntaxe utilisée). Il y a également une certaine ambiguïté puisque la dernière option ("un groupe de caractères non-blancs") pourrait correspondre à quelque chose commençant par une citation simple ou double.

De même, un ou plusieurs espaces blancs peuvent apparaître autour du signe égal ou au début (ce sont les \s* bits).

+0

Cela ressemble à une tentative grossière d'extraire une séquence * attribute = value * d'une balise HTML. Si c'est le cas, je changerais la dernière alternative à '[^ \ s>] +'. En dehors de cela, il fonctionnera probablement 99 +% du temps, même s'il est simpliste. –

0

RegexBuddy dit:

\s*([\w\.-]+)\s*=\s*('[^']*'|"[^"]*"|[^\s]+) 

Options: case insensitive 

Match a single character that is a “whitespace character” (spaces, tabs, line breaks, etc.) «\s*» 
    Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*» 
Match the regular expression below and capture its match into backreference number 1 «([\w\.-]+)» 
    Match a single character present in the list below «[\w\.-]+» 
     Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+» 
     A word character (letters, digits, etc.) «\w» 
     A . character «\.» 
     The character “-” «-» 
Match a single character that is a “whitespace character” (spaces, tabs, line breaks, etc.) «\s*» 
    Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*» 
Match the character “=” literally «=» 
Match a single character that is a “whitespace character” (spaces, tabs, line breaks, etc.) «\s*» 
    Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*» 
Match the regular expression below and capture its match into backreference number 2 «('[^']*'|"[^"]*"|[^\s]+)» 
    Match either the regular expression below (attempting the next alternative only if this one fails) «'[^']*'» 
     Match the character “'” literally «'» 
     Match any character that is NOT a “'” «[^']*» 
     Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*» 
     Match the character “'” literally «'» 
    Or match regular expression number 2 below (attempting the next alternative only if this one fails) «"[^"]*"» 
     Match the character “"” literally «"» 
     Match any character that is NOT a “"” «[^"]*» 
     Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*» 
     Match the character “"” literally «"» 
    Or match regular expression number 3 below (the entire group fails if this one fails to match) «[^\s]+» 
     Match a single character that is a “non-whitespace character” «[^\s]+» 
     Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+» 


Created with RegexBuddy 
0

Brisons \s*([\w\.-]+)\s*=\s*('[^']*'|\"[^\"]*\"|[^\s]+) à part:

\s*([\w\.-]+)\s*:

  • \s* signifie 0 ou plusieurs caractères d'espacement
  • `[\ w .-] + signifie une ou plusieurs des caractères suivants: A -za-z0-9 _.-

('[^']*'|\"[^\"]*\"|[^\s]+):

  • Un ou plusieurs caractères non 'caractères compris entre' et '.
  • Un ou plusieurs caractères non » caractères enclodes dans « et ».
  • Un ou plusieurs caractères ne contenant pas un espace

Donc, fondamentalement, vous pouvez surtout ignorer les « s dans \s* essayer de comprendre la expression, ils traitent simplement l'espacement enlever.

1

Il cherche des chaînes de texte qui sont essentiellement

<identifier> = <value> 
  • L'identifiant est constitué de lettres, chiffres, '-' et '.'

  • valeur peut être une chaîne à guillemets simples, une chaîne entre guillemets ou toute autre séquence de caractères (tant qu'elle ne contient pas d'espace).

Il correspondrait à des lignes qui ressemblent à ceci:

foo = 1234 
bar-bar= "a double-quoted string" 
bar.foo-bar ='a single quoted string' 
    .baz  =stackoverflow.com this part is ignored 

Quelques choses à noter:

  • Il n'y a pas moyen de mettre une citation à l'intérieur d'une chaîne entre guillemets (par exemple en utilisant \ "inside" ... ")
  • Si une chaîne entre guillemets est ignorée. utilisé pour valeur, puis tout à partir du premier espace est ignoré.
  • espace est optionnel
0

Oui, vous avez complètement embrouillée. : P Pour une chose, il n'y a pas d'accolades dans cette regex; ce mot fait généralement référence aux accolades: {}. Cette regex ne contient que des crochets et des parenthèses (alias parenthèses), et ils sont tous des métacaractères regex - ils ne sont pas censés correspondre à ces caractères littéralement. La même chose vaut pour la plupart des autres personnages.

Vous pourriez trouver this site utile. Très bon tutoriel et site de référence pour toutes les choses regex.

Questions connexes