2013-04-18 68 views
0

我想匹配由破折號-分隔的單詞和正則單詞。 目前我使用正則表達式 \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

你正在使用哪種語言/工具! – Anirudha

+0

語言是php –

+0

你不需要用正則表達式**只能**。你可以反過來提取單詞,然後將它與你的有效單詞列表進行匹配 – Anirudha

回答

1

你或許可以匹配這樣的:

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

也就是說,如果儀表配備2名字的字符之間,然後第一,然後從字符串中的所有字符(連字符)比賽。

+0

看起來不錯,但我不是在這裏想要的。會想想這個。 –

+0

我的問題確切。你想要什麼?你沒有寫出預期的結果。 – itachi

+0

您可能想使用lookarounds而不是捕獲。我認爲,否則w-o-r-d會變得溫和,因爲比賽不能重疊。 –

0

這個怎麼樣(從我能從你的問題理解):

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

它會匹配所有的字母詞(最多的50),幷包括「 - 」在他們(而不是在開始或在最後)

+0

不想匹配所有有邊界的詞 –

相關問題