正则表达式以匹配不确定的前缀[duplicate]数

问题描述 投票:-2回答:1

此问题已经在这里有了答案:

在lex中,以下字符串应匹配并捕获

semic
semiconductor
semicondu

使用c来完成,代码可能类似于以下内容:

strlen(str)>=5 && strncmp(str, "semiconductor", strlen(str))==0;

正则表达式或(lex规则和操作)如何做到这一点?

regex lex
1个回答
0
投票

前缀标识的正则表达式为:

semic(o(n(d(u(c(t(or?)?)?)?)?)?)?)?

但是那可能不是您想要的。

您可以执行C代码之前:

if (strlen(str)>=5 && strncmp(str, "semiconductor", strlen(str))==0)

您必须已经“捕获” str。也就是说,您使用了其他模式从输入中删除str。也许您会读字符,直到碰到空白。或者,您可能会读字母,直到找到一个非字母字符。或其他一些算法。

换句话说,您首先从输入流中识别出感兴趣的令牌,然后才检查它是否是目标的前缀。

这很重要,因为(大概)有很多您不希望匹配的单词,尽管它们包含semiconductor前缀。像semicirclesemicolon。或prossemica

令牌化是将输入拆分为令牌的任务,然后可以以某种方式对其进行处理。例如,在尝试匹配特定单词之前,我们可能将句子分解为单词,标点和空白。这是(lex)专为帮助您的任务。它并非旨在在输入流中搜索特定模式。

并不是说(f)lex无法帮助您解决问题。但是,为了了解它如何为您提供帮助,有必要进一步了解您要解决的问题,尤其是您希望如何对输入进行标记。

© www.soinside.com 2019 - 2024. All rights reserved.