.net Regex检查'-';或'+';都在起点和终点
我正在尝试创建一个正则表达式,它可以检查字符串是否与模式匹配.net Regex检查'-';或'+';都在起点和终点,.net,regex,.net,Regex,我正在尝试创建一个正则表达式,它可以检查字符串是否与模式匹配-*0001- 字符串的第一个字符或最后一个字符可以是+或-。在字符串的开头有一个可选的*(在+或-之后),之后,我们不允许使用特殊字符。除了+、-和可选的*之外,至少需要有一个字符 正确的匹配应该是 -cccc cccc- +ccccc ccccc+ +*cccc *cccc+ 一个不正确的匹配是错误的 -cc*c *- + +- 到目前为止,我的正则表达式非常接近,但还不够接近: ^([\+\-]?)(\*?)([a-z0-9]*)
-*0001-
字符串的第一个字符或最后一个字符可以是+
或-
。在字符串的开头有一个可选的*
(在+
或-
之后),之后,我们不允许使用特殊字符。除了+
、-
和可选的*
之外,至少需要有一个字符
正确的匹配应该是
-cccc
cccc-
+ccccc
ccccc+
+*cccc
*cccc+
-cc*c
*-
+
+-
^([\+\-]?)(\*?)([a-z0-9]*)([\+\-]?)(\1\4)$
也许简单点,像这样 正则表达式1:
([+-]\S+)|(\S+[+-])
这将匹配以+
,-
开头或以+
,-
结尾(或两者)的任何字符串。
它不会检查是否只有一个+
或-
,并且它本身或与任何空格都不匹配+
或-
这与-ccc
,+ccc
,ccc-
,+ccc++
,-ccc++
,++++
,++
,++
,但不是++
,也不是+\t
如果第一个字符是+
或-
,则不允许最后一个字符是+
或-
,反之亦然(字符串不以+
或-
开头和结尾),您需要执行以下操作:
正则表达式2:([+-]\S*[^+\-\S])|([^+\-\S]\S*[+-])
这与-ccc++
或++
或++++
不匹配,但与+++a
匹配
要不匹配类内部的任何+
或-
,您需要执行以下操作
正则表达式3:([+-][^+\-\s]+)|([^+\-\s]+[+-])
与+++++a
编辑:忘记转义字符类中的
-
。我不知道为什么您的尝试或其他答案如此复杂
这将满足标题的要求:^([+-].*.[+-])$
还有什么你没有告诉我们的吗?我认为OP希望在第一个和最后一个位置具有相同的字符时匹配,可以是-或+,例如
-aaa-
或+aaa+
,但不能是-aaa+
。在这种情况下,这应该是可行的:
^([-+]).+\1$
这将匹配一个-或+字符的[-+]
(-首先,它不被视为一个范围),然后是一些字符,然后是第一组字符。第一组是第一个字符,因为我们把它放在括号里
例如:
$ echo '-aaaa-' | grep -P '^([-+]).+\1$'
-aaaa-
这应该归功于科比,但出于某种原因,他删除了他的答案。我已经编辑了一点 最后的答案是
^((?[+-])(?\*?)(?\w+)(?\*?)(?\w+)(?\w+([+-])(?\*?)(?\w+)$
这考虑了可选(+-)可选(*)(字符)可选(+-)关于
ccccc
,-ccccc-
,或+ccccc-
,真正的要求是什么?它必须以+或-开头或结尾,中间可以有任何字符,也可以没有字符?因此,以下内容将匹配:+
-+-
那么+
,-
,+
,-
,+\t
,-\n
呢?顺便说一下,您发布的正则表达式非常复杂。。。它到底想传达什么?我不确定它是否像你想的那么接近-它匹配像“+*523-+-”
。@Kobi我用了你的答案谢谢,我稍微修改了一下,因为我在发帖后注意到我忘了提什么?([+-]\*?\w+\*?\w++-]\*?\w+[+-]\*?\w+$
为什么?还有什么?编辑您的问题以指定比标题包含的要求更多的要求。这个正则表达式匹配所有的测试用例。也许给出一些不匹配输入的例子,你有没有费心去看看它应该是什么match@Enzero在这种情况下,你的问题不够清楚。你说“例如”-*0001-,但您没有说它应该精确匹配什么。已编辑:此正则表达式现在匹配您的所有测试用例。你没有指定一个最小/最大朗斯,或者什么字符可能出现在中间。也许可以给出一些不匹配输入的例子。我想他正在尝试进行部分字符串匹配,但还没有告诉我们。你的答案在.Net中不起作用,只是在regex中尝试了一下。你的regex依赖于特定的regex引擎。我知道许多引擎不将第一个]
视为集合的结尾,因为-
。如果要禁止除首字母*
以外的特殊字符,请使用\w
而不是\s