一个我无法弄清楚的正则表达式问题(负面看后面)

时间:2009-02-09 16:32:13

标签: c# regex lookbehind negative-lookbehind

我如何用正则表达式做到这一点?

我想匹配此字符串:-myString

但我不想与此字符串中的-myString匹配:--myString

myString当然是任何东西。

甚至可能吗?

编辑:

这里有一些关于我到目前为止所得到的信息,因为我发布了一个问题:

string to match:
some random stuff here -string1, --string2, other stuff here
regex:
(-)([\w])*

此正则表达式返回3个匹配: -string1--string2

理想情况下,我希望只返回-string1匹配

6 个答案:

答案 0 :(得分:11)

假设你的正则表达式引擎支持(负面)lookbehind:

/(?<!-)-myString/

Perl确实如此,Javascript没有,例如。

答案 1 :(得分:0)

/^[^-]*-myString/

测试:

[~]$ echo -myString | egrep -e '^[^-]*-myString'
-myString
[~]$ echo --myString | egrep -e '^[^-]*-myString'
[~]$ echo test--myString | egrep -e '^[^-]*-myString'
[~]$ echo test --myString | egrep -e '^[^-]*-myString'
[~]$ echo test -myString | egrep -e '^[^-]*-myString'
test -myString

答案 2 :(得分:0)

您希望匹配以单个破折号开头的字符串,但不匹配具有多个破折号的字符串?

^-[^-]

说明:

^ Matches start of string
- Matches a dash
[^-] Matches anything but a dash

答案 3 :(得分:0)

  

[^ - ] {0,1} - [^ \ W - ] +

答案 4 :(得分:0)

基于上一次编辑,我猜以下表达式会更好用

\b\-\w+

答案 5 :(得分:0)

不使用任何外观,请使用:

(?:^|(?:[\s,]))(?:\-)([^-][a-zA-Z_0-9]+)

爆发:

(
  ?:^|(?:[\s,])        # Determine if this is at the beginning of the input,
                       # or is preceded by whitespace or a comma
)
(
  ?:\-                 # Check for the first dash
)
(
  [^-][a-zA-Z_0-9]+    # Capture a string that doesn't start with a dash
                       # (the string you are looking for)
)