我如何用正则表达式做到这一点?
我想匹配此字符串:-myString
但我不想与此字符串中的-myString
匹配:--myString
myString当然是任何东西。
甚至可能吗?
编辑:
这里有一些关于我到目前为止所得到的信息,因为我发布了一个问题:
string to match:
some random stuff here -string1, --string2, other stuff here
regex:
(-)([\w])*
此正则表达式返回3个匹配:
-string1
,-
和-string2
理想情况下,我希望只返回-string1
匹配
答案 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)
)