一、创建


正则表达式







re-pattern函数:

函数 (re-pattern) 接受一个字符串参数,返回一个正则表达式样式(java.util.regex.Pattern类的实例)。这个样式能用于正则表达式匹配


  1. user=> (re-pattern

    "\\d+"

    )

  2. #

    "\d+"

也可以使用读取宏来直接用文本的方式输入正则表达式:在字符串前使用#符号。和用re-pattern函数生成的一样,例如,下面的表示方式和前面的例子是相同的:


  1. user=> #

    "\\d+"


  2. #

    "\d+"

re-matcher函数:

re-matcher函数接受两个参数:一个正则表达式样式和一个字符串。返回一个有状态的"matcher"对象,提供给其它正则函数而不是直接提供样式。Matchers是java.util.regex.Matcher.类的实例。


  1. user=> (re-matcher #

    "\d+"


    "abc12345def"

    )

  2. #<Matcher java.util.regex.Matcher[pattern=\d+ region=

    0

    ,

    11

    lastmatch=]>

  3. user=> (def matcher-num (re-matcher #

    "\d+"


    "abc12345def"

    ))

  4. #'user/matcher-num

  5. user=> (re-find matcher-num)


  6. "12345"

这里的def函数用于定义变量,后面会描述


二、使用正则表达式:


re-find函数:

re-find接受一个样式与一个字符串或者一个matcher。每次调用,返回matcher中下一个符合正则匹配的结果。


  1. user=> (re-find #

    "\d+"


    "abc123"

    )


  2. "123"

re-matches函数:

re-matches接受两个参数:一个正则表达式样式和一个字符串。返回任何和正则表达式样式匹配的字符串,如果没有匹配则返回nil。例如下面的代码:


  1. user=> (re-matches #

    "hello"


    "hello,world"

    )

  2. nil

  3. user=> (re-matches #

    "hello.*"


    "hello,world"

    )


  4. "hello,world"


  5. user=> (re-matches #

    "hello,(.*)"


    "hello,world"

    )

  6. [

    "hello,world"


    "world"

    ]

re-seq函数:

re-seq接受一个样式与一个字符串。它返回一个使用永久匹配(matcher)的lazy sequence(懒序列)(这个sequence在一个连续的样式匹配的字符串中)


  1. user=> (re-seq #

    "\d"


    "clojure 1.1.0"

    )

  2. (

    "1"


    "1"


    "0"

    )

  3. user=> (re-seq #

    "\w+"


    "mary had a little lamb"

    )

  4. (

    "mary"


    "had"


    "a"


    "little"


    "lamb"

    )

re-groups函数:

接受一个matcher,返回从接近的发现与匹配的集合。如果没有嵌套集合,则返回一个完全匹配的字符串。如果有嵌套集合,则返回vector集合,第一个元素是完全匹配的(非嵌套)


  1. user=> (def phone-number

    "672-345-456-3212"

    )

  2. #'user/phone-number

  3. user=> (def matcher (re-matcher #

    "((\d+)-(\d+))"

    phone-number))

  4. #'user/matcher

  5. user=> (re-find matcher)

  6. [

    "672-345"


    "672-345"


    "672"


    "345"

    ]

  7. user=> (re-groups matcher)

  8. [

    "672-345"


    "672-345"


    "672"


    "345"

    ]