我想检查一个字符串是否包含一些预定义的单词以外的任何单词。预定义的单词是What is,plus,minus,multiplied by,divided by
,一些短语中包含单个空格。我读过this post和this one,它们都使用了负面的lookaheads,但无法想出一个有效的模式。
例如,输入文本“What is plus abc divided by”应返回为“abc”未被识别。
对于这个问题,正确的正则表达式是什么?
编辑:
请注意,我不关心无效令牌是什么,只关心它的存在。它可以是任何东西,一个字或一个数字。该问题也可以被认为是“检查输入是否仅包含允许的单词”。
3条答案
按热度按时间ux6nzvsh1#
把他们加入一个小组:
请注意,如果您有
multiply
和multiply by
(即一个令牌以另一个令牌开始),multiply by
* 必须 * 首先出现:要检查字符串是否只包含有效的令牌,请用途:
...其中
\g<token>
表示上述表达式。试试on regex101.com。
原始答案
由于我们还需要找到(第一个)无效的令牌,因此您需要匹配每个非空白条纹,并将上面的表达式不匹配的那些存储在一个组中:
如果匹配项包含组1,则意味着它是未识别的令牌。相应地输出错误。
试试on regex101.com。
icomxhvb2#
然后,您必须检查结果,以查看是否允许非指定值。
或者,指定值。在这种情况下,它最有可能只是数字。
示例
输出为1、2和3。
并且,最终允许分数值。
svgewumm3#
使用消极的前瞻来尝试匹配整个输入,* 不是 * 由允许的短语组成:
参见live demo。