我希望匹配由短语-
分隔的单词以及常规单词。
目前我正在使用这个正则表达式
\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
使用正则表达式有没有更短的方法,所以它也可以匹配-
。
由于列表太长,我想要一个更短的方式
答案 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个)并在其中包含“ - ”(但不在开头或结尾)