再次編輯,以試圖使其更清晰。正則表達式分裂字符串,如果它包含wordA或wordB
很多php正則表達式模式會給我一個匹配數組,包含總是2個值,這是由「wordA」或「wordB」分割的字符串的2部分。 如果字符串不包含這些單詞,只需返回字符串作爲第一個數組在第二個數組中爲null。
例:
preg_match("pattern","foo wordA bar",$match), $match will contain array['foo', 'bar']
preg_match("pattern","foo wordB bar",$match), $match will contain array['foo', 'bar']
preg_match("pattern","foo bar test",$match), $match will contain array['foo bar test', null]
我知道,$匹配的第一個值始終是字符串,所以我不寫。
老問題:
我需要一個行地址分成部分。 我無法找到捕獲街道部分的方法,但不包含APP或APT詞(如果有的話),如果存在的話,抓住它後的單詞。
對於爲例:
「5847A,芸香主要APP A」 應符合:(5847,A,芸香校長,A)
「5847A,芸香亞瑟王子APT 22」 應符合:(5847 ,A,芸香亞瑟王子,22)
「1111,舍伍德街」 應符合:(1111,舍伍德街道)
我使用PHP。
我到目前爲止是:/^(\d+)(.*), (.*)(?:APP|APT)(?:\s*(.*))?$/i
這與例1和2如何我如果嘗試通過添加一個替代(APP | APT)optionnal?之後,第三場比賽包括單詞APP或APT ...
任何想法如何從比賽中排除選項和替代APP或APT字?
謝謝
編輯:
我可以簡化這個問題:我怎麼能正則表達式的字符串,所以比賽返回相同的字符串減去字APP或APT,如果他出現在它的中間。
這是一個非常糟糕的主意。地址有許多不同的形狀和大小。要麼設置一個標準格式並使用它,要麼用另一個意思解析它。使用正則表達式意味着有一個恆定的模式。當使用任意地址作爲地址時,沒有這種方式。 –
我可以簡化這個問題:如何將一個句子正則表達,以便匹配返回相同的字符串減去APP或APT字,如果他出現在它的中間。 –
查看['str_replace()'](http://il1.php.net/manual/en/function.str-replace.php)以刪除APP或APT。 –