Nutrimatic使用教程简要翻译(一)——元字符及语法

Nutrimatic是什么
Nutrumatic是一个模式匹配的单词搜索工具,用于解决和构建谜题,基于Wikipedia中常见的单词和短语,使用基于正则表达式(Regular Expression,简写为regex或regexp)的模式语法(参阅下面关于“pattern language syntax”的部分)。
Nutrumatic使用在维基百科中出现至少5次的单词和短语的列表。这意味着它不仅包括英语单词,还包括许多名人名字、地名、流行语、名人名言、常用习语等等。(不幸的是,它也可能包括常见的拼写错误,如“epsiode”和“teh”。)

正则表达式语法(Regular Expression Syntax)
常用的正则表达式元字符(Metacharacter)及语法如下:
量化(Quantification)
? —— 问号表示前一个元素出现零次或一次
* —— 星号表示前面的元素出现零次或多次
+ —— 加号表示前一个元素出现一次或多次
{m,n} —— 匹配前面的元素至少m次且不超过n次,m、n均可省略
几个例子(例子中的"引号"属于Nutrumatic增加的元字符,参阅下面关于“quoted phrases”的部分):
"colou?r"——仅匹配color和color
"ab*c"——匹配ac、abc、abbc、abbbc等
"ab+c"——匹配abc、abbc、abbbc等,但不匹配ac
"a{3,5}"——仅匹配aaa、aaaa和aaaaa

布尔“或”(Boolean "or")
| —— 竖线分隔备选项
"gray|grey"——匹配gray或grey

分组(Grouping)
() —— 圆括号定义运算符的范围和优先级(以及其他用途)
gr(a|e)y——等价于gray|grey

通配符(Wildcast)
. —— 点匹配任何字符
"a.b"——匹配包含a、任意一个字符(可能为字母、数字、空格)和b的任何字符串
"a.*b"——匹配包含a,然后间隔零个或任意多个字符,在稍后的某个位置包含字符b的任何字符串

模式语言语法(Pattern Language Syntax)
Nutrimatic的查询语言基于正则表达式,特别是POSIX扩展正则表达式(但没有POSIX字符类)。
匹配的文本(单词和短语)已经标准化,只包含小写字母、数字和空格,不包含标点符号。大多数标点符号变成了空格,但撇号只被简单移除,比如Fleur-de-lis显示为fleur de lis,又如I'm Jack's total lack of surprise显示为im jacks total lack of surprise。默认情况下,空格是自动匹配的(参阅下面关于“quoted phrases”的部分)。
因为只有字母和小写字母出现在文本中,所以在查询时大写字母和标点符号可以用来表示其他内容。Nutrumatic增加了以下的扩展:

Character Classes
A —— 任何字母字符,相当于[a-z]
C —— 任何辅音,相当于[bcdfghjklmnpqrstvwxyz]
V —— 任何元音,相当于[aeiou]
_ —— 下划线匹配任何字母或数字,相当于[a-z及0-9]
- —— 连字符匹配一个可选的空格,相当于( ?),留意问号前面有个空格
# —— 井号匹配任何数字,相当于[0-9]
请注意连字符和下划线(与标准正则表达式“.”相反)只有在“quoted phrases”中才真正有用,尽管从技术层面来讲,它们可用在任何地方。

"Quoted Phrases"
默认情况下,Nutratic允许在匹配时在表达式中的任何位置插入空格。
CVCVCVCV——五个交替的辅音元音对,匹配像literature这样的单词以及像have been或was used as a这样的短语片段
要限制空格的位置,请在模式中使用“quoted phrases”。在"引号"中,除非模式特别允许,否则不会插入空格。
"CVCVCVCVCV"——1个10个字母的单词
"CVCVC-VCVCV"——1个10个字母的单词,或2个5个字母的单词
"CVCVC VCVCV"——2个5个字母的单词
可以根据需要对查询的整体或部分使用引号。

& (Intersection)
与标准的|操作符类似,&操作符要求两边都匹配。这对于并列应用多个约束非常有用。例如:
"_*a_*&_*b_*&_*c_*&_{5,}"——包含所有“a”、“b”和“c”且长度为5个字母的单个单词(但不限制顺序)
警告:&运算符的开销可能很大。大量(10个以上)的组合表达式可能需要指数级长的处理时间。在大多数情况下,这谈不上是个问题。

<Anagrams>
<尖括号>中的文本匹配任何包含相同成分但顺序不同的内容。比如<act>与act、cat、atc等匹配。
变位词(Anagram)的组成部分通常是字母,但也可以是(括在圆括号内的)任何正则表达式。
<(ag)(m)(ra)__>——任何包含ag、m、ra和其他2个字母的7个字母长的单词或短语
如果你有一部分顺序信息,可以使用如:
<aan>g<amr>——含有顺序信息,能匹配anagram,但不匹配margana
警告:变位词,特别是大的或者复杂的变位词(超过10-15个字母,或者使用几个不同但可以匹配相同文本的块,或者深度嵌套的),解析和搜索起来会非常慢。
注意:变位词算法并不完美——当使用不是单个字母的通配符或片段的变位词时,有时输出的单词并非是输入单词的变位词。如果你正在使用“花哨的”变位词表达式,记得再三核验得到的结果。

参考网址:
Nutrimatic官网:https://nutrimatic.org/
Nutrimatic使用教程:https://nutrimatic.org/usage.html
Wekipedia的Regular expression词条:https://en.wikipedia.org/wiki/Regular_expression