2010-09-07 27 views
0

什麼是以下最有效的preg_match正則表達式:簡單的PHP正則表達式問題

  1. 正則表達式必須有一定匹配字符串(區分不敏感
  2. 可以跟隨[或; 然後別的

這些測試用例的 「富」:

  • FOO - >好
  • 食品 - >壞
  • FOO; - >不好,以後需要點東西;
  • FOO;巴 - >良好
  • FOO [巴] - >好
  • FOO [ - >壞,需要的東西后]
  • FOO [巴] 1; 2; 3 - >好

這是我的測試代碼:

<?php 

$tests = array(); 
$tests[] = 'foo'; 
$tests[] = 'food'; 
$tests[] = 'foo;'; 
$tests[] = 'FOO;bar'; 
$tests[] = 'foo[bar]'; 
$tests[] = 'foo['; 
$tests[] = 'foo[]'; 
$tests[] = 'fOo[bar]1;2;3'; 

foreach ($tests as $test) 
{ 
    echo $test, ' --> '; 
    $found = preg_match('REGULAR EXPRESSION HERE', $test); 
    if ($found === false || $found < 1) 
     echo 'bad'; 
    else 
     echo 'ok'; 
    echo '<br>', PHP_EOL; 
} 

?> 
+3

您是否嘗試過閱讀正則表達式教程/信息?看起來像一個家庭作業,我會建議你自己閱讀並找到答案,從長遠來看它會幫助你。 – 2010-09-07 18:49:28

+0

關於PHP語法的Idk,但python會匹配foo([|;)(。*) – Robus 2010-09-07 18:49:51

+0

@premiso我已經結束了8年前的學校(感謝上帝),我知道這很簡單,但我討厭正則表達式並嘗試儘可能地避免它們。我慢慢地學習他們,但仍然:)我仍然需要找到一個關於他們的好網站。我所有的人都過於複雜... – Activist 2010-09-07 18:55:46

回答

2

你可以試試這個正則表達式:

/foo(;.+?|\[.+?\].*?)*$/i

如果支架不需要關閉:

/foo([;\[].+?)*$/i

如果括號或分號不能是你表達的最後一部分:

/foo([;\[][^;\[]+)*$/i

所有通過了Regex planet的測試。


資源:

+0

@Colin HEBERT他們不工作。 「富」;和「foo [」被認爲是有效的...... – Activist 2010-09-07 19:11:13

+0

@Activist,這很奇怪,你能顯示你的代碼和你使用的正則表達式嗎? – 2010-09-07 19:19:48

+0

@Colin HEBERT向OP添加了測試代碼。只需使用經過測試的正則表達式將「REGULAR EXPRESSION HERE」更改即可。沒有一個符合我的預期結果。 – Activist 2010-09-07 19:27:21

2

簡單:

/foo($|[[;].)/i