我想在下面的项目中只检测带有正则表达式的有效项目。 单词中的空格表示无效,#符号表示无效,带数字的起始单词无效。
Invalid : M_123 ASD
Invalid : M_123#ASD
Invalid : 1_M# ADD
Valid : M_125ASD
Valid : M_125$ASD
我正在尝试如下:
[A-Za-z0-9_$]
不能正常工作。我需要为单词设置有效和无效集。
我能和正则表达式匹配吗?
答案 0 :(得分:1)
你的正则表达式[A-Za-z0-9_$]
提供了一个字符类,它匹配一个ASCII字母或数字或_
或$
符号的单个字符。如果您将其与std::regex_match
一起使用,它只会匹配一个整个字符串,它只包含一个类似的字符,因为默认情况下该模式在与该方法一起使用时会被锚定。如果您将其与std::regex_search
一起使用,则([_])
之类的字符串会通过,因为正则表达式不是锚定并且可以找到部分匹配。< / p>
要匹配0个或更多个字符,您需要在课程后添加*
个量词。要匹配一个或多个字符,您需要在字符类之后添加+
量词。但是,您还有一个额外的限制:数字不能在开头出现。
好像你可以使用
^[A-Za-z][A-Za-z0-9_$]*$
请参阅regex demo at regex101.com。
<强>详情:
^
- 字符串开头[A-Za-z]
- 一个ASCII字母(恰好一次出现)[A-Za-z0-9_$]*
- 0 + ASCII字母,数字,_
或$
$
- 字符串锚定结束。请注意,对于regex_match
,您可以省略^
和$
个锚点。
答案 1 :(得分:0)
所以要求是
不能以数字开头(我假设它以字母开头)
不能包含空格或#
所有其他字符均有效
你可以试试这个正则表达式^[a-zA-Z]((?![\# ]).)+?$
^[a-zA-Z]
检查行开头的字母
((?![\# ]).)+?$
会检查该行的剩余部分是否有#
或space
。
在线演示here
编辑
根据Wiktor的评论,正则表达式可以简化为^[a-zA-Z][^# ]+$
。