2012-11-29 106 views
0

我試圖建立一個PHP preg_match函數的正則表達式,但我真的很糟糕這種邏輯。preg_match開始,結束由單詞或詞之間的空間

我有一個單詞列表,即:

「這是我的測試是啊」 「測試是一件好事」 「這是一本好書」

的目標是要知道如果特定單詞存在於列表中。例如,我想檢索單詞「是啊」,「測試」或「書」,但只有當它們是全字時,而不是像「my-test」這樣的組成字才能找到測試結果...

正則表達式必須測試搜索到的單詞是否在空格之間,在字符串的開始或結尾。但我找不到正確的方法。

我開始用這樣的:

"/^.+ (yeah|test|book|) .+/" 

但我不知道該怎麼做測試,如:如果字是在第一或結束的地方,或者如果這個詞空間之間...我認爲關於這樣的事情:

"/(^.+ |^)(yeah|test|book)(.+|)" 

任何幫助,將不勝感激。

在此先感謝。

回答

0

這裏是你可以用一個模式:

$pattern = "/\b(yeah|test|book)/"; 

\bword boundaries

例子:

$a = "this is my-test yeah"; 
$b = "test is a good thing"; 
$c = "this is a good book"; 

preg_match($mine,$a,$m1); 
preg_match($mine,$b,$m2); 
preg_match($mine,$c,$m3); 

var_dump($m1,$m2,$m3); 

這將打印:

array(2) { 
    [0]=> 
    string(4) "test" 
    [1]=> 
    string(4) "test" 
} 
array(2) { 
    [0]=> 
    string(4) "test" 
    [1]=> 
    string(4) "test" 
} 
array(2) { 
    [0]=> 
    string(4) "book" 
    [1]=> 
    string(4) "book" 
} 

更新

由於邊界正在考慮my-test這個詞在這裏2個字是我建議:

  1. 首先做一個字符串替換去除破折號
  2. 運行正則表達式模式。

    $ a = str_replace(「 - 」,「」,$ a); preg_match($ mine,$ a,$ m1);

現在,這是輸出你:

array(2) { 
    [0]=> 
    string(4) "yeah" 
    [1]=> 
    string(4) "yeah" 
} 
+0

感謝伊布的回答,但它不匹配正是我想要的......不幸的是,第一個陣列必須返回「是啊」 ,而不是「測試」,因爲在字符串中,測試不是一個單詞(my-test)。我不知道爲什麼「字邊界」在第一個字符串中提取「test」,但它不是我想要的行爲。我的最終目標是提取標籤類屬性中的某些類,如果搜索「col1」,如果有一個名爲「single-item-col1」的類,我不想檢索TRUE。只有在第一個字是「col1 ...」時,纔會返回TRUE:「... col1 ...」或結尾處:「...col1「 – titouille

+0

@titouille看到我的更新 – Ibu

相關問題