suppressPackageStartupMessages(library("tidyverse"))
package 㤼㸱tidyverse㤼㸲 was built under R version 3.6.3

1 Describe the equivalents of ?, +, * in {m,n} form.

Pattern {m,n} Meaning ? {0,1} Match at most 1 + {1,} Match 1 or more * {0,} Match 0 or more

Pattern {m,n} Meaning
? {0,1} Match at most 1
+ {1,} Match 1 or more
* {0,} Match 0 or more

For example, let’s repeat the examples in the lecture, replacing ? with{0,1},+with{1,}, and*with{0,}`.

x <- "1888 is the longest year in Roman numerals: MDCCCLXXXVIII"
str_view(x, "CC?")
Registered S3 methods overwritten by 'htmltools':
  method               from         
  print.html           tools:rstudio
  print.shiny.tag      tools:rstudio
  print.shiny.tag.list tools:rstudio
Registered S3 method overwritten by 'htmlwidgets':
  method           from         
  print.htmlwidget tools:rstudio

str_view(x, "CC{0,1}")

str_view(x, "CC+")

str_view(x, "CC{1,}")

str_view_all(x, "C[LX]+")

str_view_all(x, "C[LX]{0,1}")

The lecture does not contain an example of *. This pattern looks for a “C” optionally followed by any number of “L” or “X” characters.

str_view_all(x, "C[LX]*")

str_view_all(x, "C[LX]{0,}")

2. Describe in words what these regular expressions match: (read carefully to see if I’m using a regular expression or a string that defines a regular expression.)

  1. ^.*$
  2. "\\{.+\\}"
  3. \d{4}-\d{2}-\d{2}
  4. "\\\\{4}"

The answer to each part follows.

  1. ^.*$ will match any string. For example: ^.*$: c("dog", "$1.23", "lorem ipsum").

  2. "\\{.+\\}" will match any string with curly braces surrounding at least one character. For example: "\\{.+\\}": c("{a}", "{abc}").

  3. \d{4}-\d{2}-\d{2} will match four digits followed by a hyphen, followed by two digits followed by a hyphen, followed by another two digits. This is a regular expression that can match dates formatted like “YYYY-MM-DD” (“%Y-%m-%d”). For example: \d{4}-\d{2}-\d{2}: 2018-01-11

  4. "\\\\{4}" is \\{4}, which will match four backslashes. For example: "\\\\{4}": "\\\\\\\\".

3. Create regular expressions to find all words that:

Start with three consonants. Have three or more vowels in a row. Have two or more vowel-consonant pairs in a row. The answer to each part follows.

1. Start with three consonants.

str_view(words, "^[^aeiou]{3}", match = TRUE)

2. Have three or more vowels in a row.

str_view(words, "[aeiou]{3,}", match = TRUE)

3. Have two or more vowel-consonant pairs in a row.

str_view(words, "([aeiou][^aeiou]){2,}", match = TRUE)

4. Solve the beginner regexp crosswords at https://regexcrossword.com/challenges/

Visit https://regexcrossword.com/challenges/. It’s fun.

LS0tDQp0aXRsZTogIlJlcGV0aXRpb24iDQpvdXRwdXQ6IA0KICBodG1sX25vdGVib29rOg0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19mbG9hdDogdHJ1ZQ0KLS0tDQoNCmBgYHtyfQ0Kc3VwcHJlc3NQYWNrYWdlU3RhcnR1cE1lc3NhZ2VzKGxpYnJhcnkoInRpZHl2ZXJzZSIpKQ0KYGBgDQoNCiMjIyAxIERlc2NyaWJlIHRoZSBlcXVpdmFsZW50cyBvZiBgP2AsIGArYCwgYCpgIGluIGB7bSxufWAgZm9ybS4NCg0KUGF0dGVybgl7bSxufQlNZWFuaW5nDQo/CXswLDF9CU1hdGNoIGF0IG1vc3QgMQ0KKwl7MSx9CU1hdGNoIDEgb3IgbW9yZQ0KKgl7MCx9CU1hdGNoIDAgb3IgbW9yZQ0KDQp8IFBhdHRlcm4JfCBge20sbn1gCXwgTWVhbmluZyAgICAgICAgIHwNCnwtLS0tfC0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgYD9gCXwgYHswLDF9YHwJTWF0Y2ggYXQgbW9zdCAxIHwNCnwgYCtgCXwgYHsxLH1gfAlNYXRjaCAxIG9yIG1vcmUgIHwNCnwgYCpgCXwgYHswLH1gfAlNYXRjaCAwIG9yIG1vcmUgIHwNCg0KDQpGb3IgZXhhbXBsZSwgbGV04oCZcyByZXBlYXQgdGhlIGV4YW1wbGVzIGluIHRoZSBsZWN0dXJlLCByZXBsYWNpbmcgYD8gd2l0aCBgezAsMX1gLCBgK2Agd2l0aCBgezEsfWAsIGFuZCBgKmAgd2l0aCBgezAsfWAuDQoNCmBgYHtyfQ0KeCA8LSAiMTg4OCBpcyB0aGUgbG9uZ2VzdCB5ZWFyIGluIFJvbWFuIG51bWVyYWxzOiBNRENDQ0xYWFhWSUlJIg0Kc3RyX3ZpZXcoeCwgIkNDPyIpDQpzdHJfdmlldyh4LCAiQ0N7MCwxfSIpDQpzdHJfdmlldyh4LCAiQ0MrIikNCnN0cl92aWV3KHgsICJDQ3sxLH0iKQ0Kc3RyX3ZpZXdfYWxsKHgsICJDW0xYXSsiKQ0Kc3RyX3ZpZXdfYWxsKHgsICJDW0xYXXswLDF9IikNCmBgYA0KDQpUaGUgbGVjdHVyZSBkb2VzIG5vdCBjb250YWluIGFuIGV4YW1wbGUgb2YgYCpgLiBUaGlzIHBhdHRlcm4gbG9va3MgZm9yIGEg4oCcQ+KAnSBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IGFueSBudW1iZXIgb2Yg4oCcTOKAnSBvciDigJxY4oCdIGNoYXJhY3RlcnMuDQoNCmBgYHtyfQ0Kc3RyX3ZpZXdfYWxsKHgsICJDW0xYXSoiKQ0Kc3RyX3ZpZXdfYWxsKHgsICJDW0xYXXswLH0iKQ0KYGBgDQoNCiMjIyAyLiBEZXNjcmliZSBpbiB3b3JkcyB3aGF0IHRoZXNlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgbWF0Y2g6IChyZWFkIGNhcmVmdWxseSB0byBzZWUgaWYgSeKAmW0gdXNpbmcgYSByZWd1bGFyIGV4cHJlc3Npb24gb3IgYSBzdHJpbmcgdGhhdCBkZWZpbmVzIGEgcmVndWxhciBleHByZXNzaW9uLikNCg0KMS4gYF4uKiRgDQoyLiBgIlxcey4rXFx9ImANCjMuIGBcZHs0fS1cZHsyfS1cZHsyfWANCjQuIGAiXFxcXHs0fSJgDQoNClRoZSBhbnN3ZXIgdG8gZWFjaCBwYXJ0IGZvbGxvd3MuDQoNCjEuIGBeLiokYCB3aWxsIG1hdGNoIGFueSBzdHJpbmcuIEZvciBleGFtcGxlOiBgXi4qJGA6IGBjKCJkb2ciLCAiJDEuMjMiLCAibG9yZW0gaXBzdW0iKWAuDQoNCjIuIGAiXFx7LitcXH0iYCB3aWxsIG1hdGNoIGFueSBzdHJpbmcgd2l0aCBjdXJseSBicmFjZXMgc3Vycm91bmRpbmcgYXQgbGVhc3Qgb25lIGNoYXJhY3Rlci4gRm9yIGV4YW1wbGU6IGAiXFx7LitcXH0iYDogYGMoInthfSIsICJ7YWJjfSIpYC4NCg0KMy4gYFxkezR9LVxkezJ9LVxkezJ9YCB3aWxsIG1hdGNoIGZvdXIgZGlnaXRzIGZvbGxvd2VkIGJ5IGEgaHlwaGVuLCBmb2xsb3dlZCBieSB0d28gZGlnaXRzIGZvbGxvd2VkIGJ5IGEgaHlwaGVuLCBmb2xsb3dlZCBieSBhbm90aGVyIHR3byBkaWdpdHMuIFRoaXMgaXMgYSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBjYW4gbWF0Y2ggZGF0ZXMgZm9ybWF0dGVkIGxpa2Ug4oCcWVlZWS1NTS1EROKAnSAo4oCcJVktJW0tJWTigJ0pLiBGb3IgZXhhbXBsZTogYFxkezR9LVxkezJ9LVxkezJ9YDogYDIwMTgtMDEtMTFgDQoNCjQuIGAiXFxcXHs0fSIgaXMgXFx7NH1gLCB3aGljaCB3aWxsIG1hdGNoIGZvdXIgYmFja3NsYXNoZXMuIEZvciBleGFtcGxlOiBgIlxcXFx7NH0iYDogYCJcXFxcXFxcXCJgLg0KDQojIyMgMy4gQ3JlYXRlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdG8gZmluZCBhbGwgd29yZHMgdGhhdDoNCg0KU3RhcnQgd2l0aCB0aHJlZSBjb25zb25hbnRzLg0KSGF2ZSB0aHJlZSBvciBtb3JlIHZvd2VscyBpbiBhIHJvdy4NCkhhdmUgdHdvIG9yIG1vcmUgdm93ZWwtY29uc29uYW50IHBhaXJzIGluIGEgcm93Lg0KVGhlIGFuc3dlciB0byBlYWNoIHBhcnQgZm9sbG93cy4NCg0KKioxLiBTdGFydCB3aXRoIHRocmVlIGNvbnNvbmFudHMuKioNCmBgYHtyfQ0Kc3RyX3ZpZXcod29yZHMsICJeW15hZWlvdV17M30iLCBtYXRjaCA9IFRSVUUpDQpgYGANCg0KKioyLiBIYXZlIHRocmVlIG9yIG1vcmUgdm93ZWxzIGluIGEgcm93LioqDQoNCmBgYHtyfQ0Kc3RyX3ZpZXcod29yZHMsICJbYWVpb3VdezMsfSIsIG1hdGNoID0gVFJVRSkNCmBgYA0KDQoqKjMuIEhhdmUgdHdvIG9yIG1vcmUgdm93ZWwtY29uc29uYW50IHBhaXJzIGluIGEgcm93LioqDQoNCmBgYHtyfQ0Kc3RyX3ZpZXcod29yZHMsICIoW2FlaW91XVteYWVpb3VdKXsyLH0iLCBtYXRjaCA9IFRSVUUpDQpgYGANCg0KIyMjIDQuIFNvbHZlIHRoZSBiZWdpbm5lciByZWdleHAgY3Jvc3N3b3JkcyBhdCA8aHR0cHM6Ly9yZWdleGNyb3Nzd29yZC5jb20vY2hhbGxlbmdlcy8+DQoNClZpc2l0IDxodHRwczovL3JlZ2V4Y3Jvc3N3b3JkLmNvbS9jaGFsbGVuZ2VzLz4uIEl0J3MgZnVuLg==