匹配常规和破折号分隔单词与正则表达式

时间:2013-04-18 10:03:43

标签: php regex

我希望匹配由短语-分隔的单词以及常规单词。 目前我正在使用这个正则表达式 \b(word|someother|xyz|....|word50)\b // upto 50 words 但现在麻烦的是我也想要像

这样的匹配词
w-ord
w-o-r-d
some-oth-e-r
x-y-z

所以不要像我这样手动将(-)?放在每个字符之后

\b(w(-)?o(-)?r(-)?d|w(-)?o(-)?r(-)?d|someother|....|word50)\b

使用正则表达式有没有更短的方法,所以它也可以匹配-。 由于列表太长,我想要一个更短的方式

2 个答案:

答案 0 :(得分:1)

您可以这样匹配:

$regex = '#\b(word|someother|xyz|....|word50)\b#';
$ret = preg_match($regex, preg_replace('#(?<=\w)-(?=\w)#', '', $str), $m);

即。如果破折号出现在两个单词字符之间,则首先从字符串中删除所有破折号(连字符)然后匹配。

答案 1 :(得分:0)

这个怎么样(从你的问题中我可以理解):

/[a-zA-z]{1}[a-zA-z\-]{0,48}[a-zA-z]{1}/

它将匹配所有字母词(最多50个)并在其中包含“ - ”(但不在开头或结尾)