Existe-t-il un équivalent de string-match pour lexpression rationnelle?
On février 17, 2021 by adminJe « voudrais écrire quelque chose comme ça, sauf pour comparer la région avec une expression régulière.
(if (string-match (buffer-substring-no-properties (point) (mark)) "foo") (bar))
Existe-t-il un équivalent de string-match pour lexpression rationnelle que je peux utiliser comme ceci
(if (regexp-match (buffer-substring-no-properties (point) (mark)) "^[A-Z]") (bar))
afin quil retourne true si la région sélectionnée est « Apple » et nul si cest « apple »?
Commentaires
Réponse
Pour une réponse:
string-match
est destiné à être utilisé avec les expressions régulières.
(string-match REGEXP STRING & optionnel START)
Renvoie lindex du début de la première correspondance pour REGEXP dans STRING, ou nil. La correspondance ne tient pas compte de la casse si «case-fold-search» est non nul. Si le troisième argument START est non nul, lancez la recherche à cet index dans STRING. Pour lindex du premier caractère après la correspondance, faites (match-end 0). match-end et match-begin donnent également des indices de sous-chaînes correspondant aux constructions de parenthèses dans le modèle.
Vous pouvez utiliser la fonction match-string pour extraire les sous-chaînes correspondant aux constructions de parenthèses dans REGEXP.
Voici quelques exemples
(string-match "\\(dog\\|cat\\)" "There is a dog.") ;; => 11 (string-match "\\(dog\\|cat\\)" "There are two cats here." 0) ;; => 14 (string-match "\\(dog\\|cat\\)" "There are two cats here." 15) ;; => nil (string-match "\\(dog\\|cat\\)" "There are horses.") ;; => nil
Notez que si vous navez pas lintention dutiliser match-data
après avoir utilisé string-match
, vous devriez préférez utiliser string-match-p
qui fonctionne exactement comme string-match
sauf que cela ne modifie pas match-data
lors de lexécution.
Comme dautres lont dit, dans votre cas, looking-at
serait probablement un meilleur choix de toute façon.
(en regardant REGEXP)
Renvoie t si le texte après le point correspond à lexpression régulière REGEXP. Cette fonction modifie les données de correspondance qui accèdent «début de correspondance», «fin de correspondance» et «données de correspondance»; enregistrez et restaurez les données de correspondance si vous souhaitez les conserver.
Commentaires
- Étant donné que lOP a mal lordre des arguments, ce serait probablement une bonne idée de montrer un exemple dextrait de code appelant
string-match
.
string-match
utilise déjà regexps (ii) let-bindcase-fold-search
pour nil autour de votre appel si vous voulez respecter la casse (iii) utilisezlooking-at
pour faire correspondre le texte au point (iv), vous pouvez utiliserregion-beginning
etregion-end
au lieu depoint
etmark
dans le cas où ce dernier est avant le premier (point bonus pour sassurer queuse-region-p
est non nul)C-h f
vous le dirait.