我會做的是explode的內容和使用它在我的意志。我知道你問一個正則表達式,但每次在所以我想不用說在這裏做回答,有時它更清晰:
function mountHtml($text = '[text required id="address_line_1" label="Address Line 1"]')
{
$text = str_replace(['[', ']'],'',$text);
$items = explode(' ', $text);
$items[3] = str_replace(['label="', '"'], '', implode(' ', array_slice($items, 3)));
$items = array_splice($items, 0, 4);
$label = [
str_replace('id', 'for', $items[2]),
$items[3]
];
$input = [
$items[0],
str_replace('id', 'name', $items[2]),
$items[2]
];
$htmlStructure = "<label $label[0]>$label[1] ($items[1])</label>";
$htmlStructure .= "<input type='$input[0]' $input[1] $input[2] />";
return $htmlStructure;
}
echo mountHtml();
//Result
<label for="address_line_1">Address Line 1 (required)</label><input type="text" name="address_line_1" id="address_line_1">
PS:我注意到,你沒有添加ID寫入輸入結構,但對better DOM management這麼做很重要,因爲帶有for的每個標籤都鏈接到帶有ID的結構,這是W3C標準。
for =字符串 指定用於指示要與標題關聯的表單控件。 屬性的值必須是與label元素相同的Document中的可鏈接表單關聯元素的ID。
https://www.w3.org/wiki/HTML/Elements/label
我認爲你應該做的算法誰需要一個字符串參數,當你想要它 –
你可以使用[preg_replace函數]返回字符串(http://php.net/manual/de /function.preg-replace.php)與[命名捕獲組](http://www.regular-expressions.info/named.html)。爲了測試/開發目的,請嘗試[regex101](https://regex101.com/)。 – Xatenev
當我不得不這樣做來創建簡單的短代碼系統時,我傾向於分解所有參數並在循環中處理它們。這將使我更具可讀性,減少頭部擠壓。但是,如果你想驗證你的參數值,則正則表達式將是合適的。順便說一下,不要說正則表達式不適合,但我不會爲你寫:D – Kaddath