Difference between revisions of "Help:Regular expressions"

From Nookipedia, the Animal Crossing wiki
m
(→‎Examples: +example for moving attributes into existing style code)
Line 31: Line 31:
  
 
* Prepend an <code>html</code> selector to every CSS property in a stylesheet ([https://stackoverflow.com/a/37695196 source] on StackOverflow by [https://stackoverflow.com/users/6438812/ryan-worth Ryan Worth]):
 
* Prepend an <code>html</code> selector to every CSS property in a stylesheet ([https://stackoverflow.com/a/37695196 source] on StackOverflow by [https://stackoverflow.com/users/6438812/ryan-worth Ryan Worth]):
:Find <code><nowiki>(^(?:\s|[^@{])*?|[},]\s*)(\/\/.*\s+|.*\/\*[^*]*\*\/\s*|@media.*{\s*|@font-face.*{\s*)*([.#]?-?[_a-zA-Z]+[_a-zA-Z0-9-]*)(?=[^}]*{)</nowiki></code>
+
:Find: <code><nowiki>(^(?:\s|[^@{])*?|[},]\s*)(\/\/.*\s+|.*\/\*[^*]*\*\/\s*|@media.*{\s*|@font-face.*{\s*)*([.#]?-?[_a-zA-Z]+[_a-zA-Z0-9-]*)(?=[^}]*{)</nowiki></code>
 
:Replace: <code><nowiki>$1$2html $3</nowiki></code>
 
:Replace: <code><nowiki>$1$2html $3</nowiki></code>
 +
 +
* Move <code>width</code> attributes into existing <code>style</code> attribute (PHP):
 +
:Find: <code><nowiki>&nbsp;width="(.*)\%"(.*)style="</nowiki></code>
 +
:Replace: <code><nowiki>$2style="width: $1%;&nbsp;</nowiki></code>
 +
:''Notes'': Note the space at the start of the find and the end of the replace. May mess up if multiple elements are on the same line.
  
 
{{Nookipedia}}
 
{{Nookipedia}}

Revision as of 22:52, June 30, 2021

A regular expression (regex) is a sequence of characters defining a search pattern. On the wiki, they are commonly used for finding and replacing text through Special:ReplaceText (staff only), AutoWikiBrowser, Pywikibot, or Scribunto/Lua modules.

Each tool/programming language uses its own ruleset for regular expressions:

If you need help with regular expressions, you may post on the talk page, or join the Nookipedia Discord and ask in the #wiki-tech channel.

Testing

There are several online tools to test our patterns. A small selection is listed below.

Examples

Below is a list of examples of regular expressions that may help you on the wiki. Feel free to expand this list.

  • Replacing instances of {{I|Item Name}} with {{I|Item Name|New Horizons}} (Python):
Find: {{I\|(?!.*\|)(.*?)}}
Replace: {{I|\1|New Horizons}}
  • Matching a multi-line Foreignname template and adding a new "See also" section after it (Python):
Find: {{Foreignname([\s\S]*?\n}})
Replace: {{Foreignname\1\n\n==See also==
  • Add f#-img parameters after each furn# parameter in instances of house templates; the template takes in the furniture name as a parameter and returns a filename (AWB):
Find: \|furn([1-9]\d?)= (.*)
Replace: |furn$1= $2\n|f$1-img= {{subst:Example|$2}}
  • Prepend an html selector to every CSS property in a stylesheet (source on StackOverflow by Ryan Worth):
Find: (^(?:\s|[^@{])*?|[},]\s*)(\/\/.*\s+|.*\/\*[^*]*\*\/\s*|@media.*{\s*|@font-face.*{\s*)*([.#]?-?[_a-zA-Z]+[_a-zA-Z0-9-]*)(?=[^}]*{)
Replace: $1$2html $3
  • Move width attributes into existing style attribute (PHP):
Find:  width="(.*)\%"(.*)style="
Replace: $2style="width: $1%; 
Notes: Note the space at the start of the find and the end of the replace. May mess up if multiple elements are on the same line.