Skip to content
Tiantan
Articles

Er der en ækvivalent af streng-match til regexp?

On februar 17, 2021 by admin

Jeg vil gerne skrive noget som dette undtagen at sammenligne regionen med en regexp.

(if (string-match (buffer-substring-no-properties (point) (mark)) "foo") (bar)) 

Er der et ækvivalent med streng-match til regexp, som jeg kan bruge som dette

(if (regexp-match (buffer-substring-no-properties (point) (mark)) "^[A-Z]") (bar)) 

, så det returnerer sandt, hvis den valgte region er “Æble” og ingen, hvis det er “æble”?

Kommentarer

  • Et par tilfældige bemærkninger: (i) string-match bruger allerede regexps (ii) let-bind case-fold-search til nul omkring dit opkald, hvis du vil have store og små bogstaver (iii) brug looking-at for at matche tekst i punkt (iv) kan du bruge region-beginning og region-end i stedet for point og mark hvis sidstnævnte er før førstnævnte (bonuspoint for at sikre, at use-region-p ikke er nul)
  • @YoungFrom jeg synes, at punkt (i) kvalificerer som et svar.
  • C-h f ville fortælle dig det.

Svar

Af hensyn til et svar:

string-match er beregnet til brug med regexps.

(streng-match REGEXP STRING & valgfri START)

Returindeks for start af første kamp for REGEXP i STRING eller nul. Matching ignorerer store og små bogstaver, hvis case-fold-search ikke er nul. Hvis tredje argument START ikke er nul, skal du starte søgningen ved dette indeks i STRING. For indeks over første tegn ud over kampen skal du gøre (match-end 0). match-end og match-begyndelse giver også indeks for understrenge matchet med parentesekonstruktioner i mønsteret.

Du kan bruge funktionen match-streng til at udtrække de understregninger, der matches med parentesekonstruktionerne i REGEXP.

Her er nogle eksempler

 (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  

Bemærk, at hvis du ikke planlægger at bruge match-data efter at have brugt string-match, skal du foretrækker at bruge string-match-p som fungerer ligesom string-match bortset fra at det ikke ændrer match-data når det køres.

Som andre har sagt, ville looking-at sandsynligvis være et bedre valg i dit tilfælde.

(ser på REGEXP)

Returner t hvis tekst efter punkt matcher REGEXP med regulært udtryk. Denne funktion ændrer de matchdata, der har match-start, match-end og match-data adgang; gem og gendan matchdata, hvis du vil bevare dem.

Kommentarer

  • I betragtning af at OP fik argumentordren forkert, det ville sandsynligvis være en god ide at vise et eksempel på et uddrag, der kalder string-match.

Written by admin

Skriv et svar Annuller svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *

Seneste indlæg

  • Ved hjælp af en balun med en resonansdipol
  • Hvad er forskellen mellem “ kan ikke ” og “ kan ikke ”? [duplikat]
  • På JFK, kan du bevæge dig mellem terminaler med airside på indenrigsflyvninger?
  • “ Dybt værdsat ” eller “ meget værdsat ”
  • Hvad betyder ' abstrakte ideer '? [lukket]

Arkiver

  • februar 2021
  • januar 2021
  • december 2020
  • november 2020
  • Deutsch
  • Nederlands
  • Svenska
  • Norsk
  • Dansk
  • Español
  • Français
  • Português
  • Italiano
  • Română
  • Polski
  • Čeština
  • Magyar
  • Suomi
  • 日本語
  • 한국어

Copyright Tiantan 2021 | Theme by Theme in Progress | Proudly powered by WordPress

Back to top