包含“.”和“-”的字符串的php正则表达式

包含“.”和“-”的字符串的php正则表达式,php,regex,string,Php,Regex,String,嗨,我需要帮忙做正则表达式。字符串必须包含-且不能包含 有人能帮我吗。你不需要正则表达式: if (strpos($string, '-') !== false && strpos($string, '.') === false) //do what you want... 不了解php,但这应该可以做到: ^[^.]*-[^.]*$ 不需要正则表达式,一种方法是使用strpos strpos($mystr,"-" ) !== FALSE && str

嗨,我需要帮忙做正则表达式。字符串必须包含-且不能包含


有人能帮我吗。

你不需要正则表达式:

if (strpos($string, '-') !== false && strpos($string, '.') === false)
    //do what you want...

不了解php,但这应该可以做到:

^[^.]*-[^.]*$

不需要正则表达式,一种方法是使用strpos

strpos($mystr,"-" ) !== FALSE && strpos($mystr,"." ) === FALSE

这有点模糊。。。你能更具体地描述一下你期望字符串的格式吗?这就是格式。字符串必须包含“-”而不能包含“.”好的-不需要正则表达式,那么:请参阅Franz和ghostdog74的答案。@dotty:注意,必须包含一个-是不明确的:它可以解释为必须包含一个-或者至少包含一个-。不要忘记锚定符!^秋葵:锐利的眼睛,一如既往-你能解释一下为什么它会使它更有效吗?我不太擅长正则表达式@Franz:因为*量词是贪婪的,所以前面的表达式[^.]将消耗尽可能多的能量,然后回溯将用于匹配表达式的其余部分。因此,如果测试字符串是foo-bar,[^.]*将首先匹配整个字符串,然后后退直到[^.]*-匹配foo-然后匹配其余字符串,以便整个表达式匹配。使用[^.-]*表达式将始终与foo匹配,而不进行回溯。@Gumbo-谢谢。这个想法确实在我脑海中闪过,但我不确定这是否必要。我会读的。谢谢strpos比正则表达式匹配更有效,尤其是在这种情况下。这是一个完美的答案+1strpos必须扫描字符串两次,一个好的regexp只能扫描一次@雷托:是的。必须运行基准才能进行真正的比较。但在这样一个简单的情况下,我认为这可能并不重要。。。你同意吗?弗兰兹:我真的不喜欢这个特殊的regexp的结果,它看起来有点不对劲,但对于其他99种情况来说,regexp更干净、更明确。而这个strpos-0-maybe-false-lets-use-====-akwardness只会让情况变得更糟。所以对我来说,regexp是一个更简单的解决方案,但这是一个品味的问题。。你的意见可能不同。是的,我明白你的意思。我同意正则表达式通常更干净,但有时它们更难阅读——特别是如果你对它们不是很有经验的话。再说一次:你是对的,strpos也不是最容易阅读的;