Main Content

namedPattern

指定命名模式

自 R2020b 起

说明

newpat = namedPattern(pat) 创建一个包含 pat 的命名模式,并使用 pat 的输入名称对其进行命名。您可以使用 namedPattern 通过命名模式的各部分来组织复杂的模式表达式。命名模式可以嵌套在另一个命名模式中。

示例

newpat = namedPattern(pat,name) 指定 pat 的自定义名称。

newpat = namedPattern(pat,name,description) 还指定 pat 的显示 description

示例

示例

全部折叠

使用 namedPattern 将一个模式分配给某命名模式。

构建一个模式,该模式匹配由数字和算术运算符组成的简单算术表达式。

mathSymbols = asManyOfPattern(digitsPattern | characterListPattern("+-*/="),1)
mathSymbols = pattern
  Matching:

    asManyOfPattern(digitsPattern | characterListPattern("+-*/="),1)

使用命名模式构建一个模式,该模式匹配在字符之间具有空白的算术表达式。

longExpressionPat = asManyOfPattern(mathSymbols + whitespacePattern) + mathSymbols
longExpressionPat = pattern
  Matching:

    asManyOfPattern(asManyOfPattern(digitsPattern | characterListPattern("+-*/="),1) + whitespacePattern) + asManyOfPattern(digitsPattern | characterListPattern("+-*/="),1)

此表达式很长且难以阅读。使用 namedPattern 将模式分配给命名模式 mathSymbols

mathSymbols = namedPattern(mathSymbols);
shortExpressionPat = asManyOfPattern(mathSymbols + whitespacePattern) + mathSymbols
shortExpressionPat = pattern
  Matching:

    asManyOfPattern(mathSymbols + whitespacePattern) + mathSymbols

  Using named patterns:

    mathSymbols: asManyOfPattern(digitsPattern | characterListPattern("+-*/="),1)

创建一个包含一些算术表达式的字符串,然后从文本中提取模式。

txt = "What is the answer to 1 + 1? Oh, I know! 1 + 1 = 2!";
arithmetic = extract(txt,shortExpressionPat)
arithmetic = 2x1 string
    "1 + 1"
    "1 + 1 = 2"

基于两个命名模式创建一个模式。命名模式为模式的显示添加上下文。

构建两个模式:一个模式匹配以字母 D 开头和结尾的单词,另一个模式匹配以字母 R 开头和结尾的单词。

dWordsPat = letterBoundary + caseInsensitivePattern("d" + lettersPattern + "d") + letterBoundary;
rWordsPat = letterBoundary + caseInsensitivePattern("r" + lettersPattern + "r") + letterBoundary;

使用命名模式构建一个模式,该模式查找以 D 开头和结尾的单词后跟以 R 开头和结尾的单词。

dAndRWordsPat = dWordsPat + whitespacePattern + rWordsPat
dAndRWordsPat = pattern
  Matching:

    letterBoundary + caseInsensitivePattern("d" + lettersPattern + "d") + letterBoundary + whitespacePattern + letterBoundary + caseInsensitivePattern("r" + lettersPattern + "r") + letterBoundary

此模式难以阅读,也不能充分表示其目的。使用 namedPattern 将模式指定为显示指定名称和说明的命名模式以代替模式表达式。

dWordsPat = namedPattern(dWordsPat,"dWords", "Words that start and end with D");
rWordsPat = namedPattern(rWordsPat,"rWords", "Words that start and end with R");
dAndRWordsPat = dWordsPat + whitespacePattern + rWordsPat
dAndRWordsPat = pattern
  Matching:

    dWords + whitespacePattern + rWords

  Using named patterns:

    dWords: Words that start and end with D
    rWords: Words that start and end with R

  Use details to show more information

创建一个字符串并提取与模式匹配的文本。

txt = "Dad, look at the divided river!";
words = extract(txt,dAndRWordsPat)
words = 
"divided river"

构建易于阅读的模式来匹配电子邮件地址。

电子邮件地址遵循结构 username@domain.TLD,其中 usernamedomain 由用句点分隔的标识符组成。构建一个模式,它匹配由字母数字字符和 "_" 字符的任意组合组成的标识符。使用 maskedPattern 将此模式命名为 identifier

identifier = asManyOfPattern(alphanumericsPattern(1) | "_", 1);
identifier = maskedPattern(identifier);

构建模式以匹配由标识符组成的域和子域。创建一个匹配指定列表中的 TLD 的模式。

subdomain = asManyOfPattern(identifier + ".") + identifier;
domainName = namedPattern(identifier,"domainName");
tld = "com" | "org" | "gov" | "net" | "edu";

构建一个模式来匹配电子邮件的本地部分,它匹配一个或多个用句点分隔的标识符。通过组合先前定义的各模式构建一个模式,用于匹配域、TLD 和任何可能存在的子域。使用 namedPattern 将其中每个模式分配给一个命名模式。

username = asManyOfPattern(identifier + ".") + identifier;
domain = optionalPattern(namedPattern(subdomain) + ".") + ...
            domainName + "." + ...
            namedPattern(tld);

将所有模式组合成一个模式表达式。使用 namedPatternusernamedomainemailPattern 分配给命名模式。

emailAddress = namedPattern(username) + "@" + namedPattern(domain);
emailPattern = namedPattern(emailAddress)
emailPattern = pattern
  Matching emailAddress:

    username + "@" + domain

  Using named patterns:

    emailAddress  : username + "@" + domain
      username    : asManyOfPattern(identifier + ".") + identifier
      domain      : optionalPattern(subdomain + ".") + domainName + "." + tld
        subdomain : asManyOfPattern(identifier + ".") + identifier
        domainName: identifier
        tld       : "com" | "org" | "gov" | "net" | "edu"

  Use details to show more information

创建一个包含电子邮件地址的字符串,然后从文本中提取模式。

txt = "You can reach me by email at John.Smith@department.organization.org";
extract(txt,emailPattern)
ans = 
"John.Smith@department.organization.org"

命名模式允许使用点索引以便访问命名子模式。使用点索引将特定值赋给命名模式 domain

emailPattern.emailAddress.domain = "mathworks.com"
emailPattern = pattern
  Matching emailAddress:

    username + "@" + domain

  Using named patterns:

    emailAddress: username + "@" + domain
      username  : asManyOfPattern(identifier + ".") + identifier
      domain    : "mathworks.com"

  Use details to show more information

输入参数

全部折叠

输入模式,指定为pattern、字符串数组、字符向量或字符向量元胞数组。

数据类型: char | string | pattern | cell

模式名称,指定为字符串标量、字符向量或字符向量元胞数组。

数据类型: char | string | cell

命名模式说明,指定为字符串标量、字符向量或字符向量元胞数组。显示模式表达式时,命名模式及其说明将与完整模式表达式分开显示。

数据类型: char | string | cell

输出参量

全部折叠

输出模式,以pattern或模式对象数组形式返回。

扩展功能

基于线程的环境
使用 MATLAB® backgroundPool 在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool 加快代码运行速度。

版本历史记录

在 R2020b 中推出