【发布时间】:2014-06-23 10:24:34
【问题描述】:
我需要确定在 c++ 中是否在另一个字符串中找到给定的单词。
我的函数原型会像bool check(string sentence, string word);
而“句子”可能是:word.someWord AND/OR/XOR word2.someWord *AND/OR/XOR* word3.someWord,然后就是这样。
举个真实的例子:unlock_the_door.value=1 AND turn_of_car.checkSum=1
现在,在这个例子中,如果我将 word 分配给 lock,我的 check 函数应该返回 false,但如果我将它赋予“unlock”,它应该返回 true。
为此,我习惯使用 .find() 函数,但大家都知道这是错误的,因为即使我将 lock 作为单词参数,它也会返回 true,因为“unlock”包含“lock”
我想我需要使用正则表达式,但我不知道该怎么做。有没有人可以帮助我?提前致谢。
【问题讨论】:
-
请问-1是什么原因?
-
您不是在提出尝试的解决方案并提出问题;您正在提出一个解决方案并要求 SO 为您实施它(至少,在我看来,这就是它的样子)。在您可以使用基于正则表达式的实现之前,您应该至少了解 一些 正则表达式语法;否则,您获得的任何解决方案都可能对您不可用(或可用但非常脆弱)。无论哪种方式,您是在询问 C++ 正则表达式 API、要使用的实际正则表达式语法还是其他什么?
-
@utnapistim 实际上我需要知道有没有办法在不使用正则表达式的情况下做到这一点
-
有;您可以标记字符串并处理每个标记(参见@SteveBarnes 的回答),您可以为缓冲区编写一个有状态的前向解析器(作为 FSM 实现 - 更高效但更复杂/容易出错),您可以使用正则表达式(高抽象级别)或以上的组合。
-
我会使用一个组合:首先将表达式标记为术语(“unlock_the_door.value=1”、“AND”、“turn_of_car.checkSum=1”),然后在标识符上应用正则表达式每个条款。它不是最有效的,但它很好地分离了关注点,并且以后易于更改/扩展。 (如果您必须在要求非常苛刻的环境中执行此操作,请考虑编写每个字符的单通解析器(作为 FSM)。
标签: c++ regex string substring