1

我想匹配由破折号分隔的-单词和常规单词。目前我正在使用这个正则表达式 \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

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

4

2 回答 2

1

您可能可以像这样匹配它:

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

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

于 2013-04-18T10:13:20.953 回答
0

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

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

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

于 2013-04-18T10:13:44.820 回答