Вот решение:
<?php
// here's the pattern:
$pattern = '/<(\w+)(\s+(\w+)\s*\=\s*(\'|")(.*?)\\4\s*)*\s*(\/>|>)/';
// a string to parse:
$string = 'Hello, try clicking <a href="#paragraph">here</a>
<br/>and check out.<hr />
<h2>title</h2>
<a name ="paragraph" rel= "I\'m an anchor"></a>
Fine, <span title=\'highlight the "punch"\'>thanks<span>.
<div class = "clear"></div>
<br>';
// let's get the occurrences:
preg_match_all($pattern, $string, $matches, PREG_PATTERN_ORDER);
// print the result:
print_r($matches[0]);
?>
Чтобы проверить его глубоко, я ввел в теги автоматического закрытия строки, например:
Я также вводил теги с:
Если вы найдете что-то, что не работает в доказательстве концепции выше, я доступен для анализа кода, чтобы улучшить свои навыки.
& lt; EDIT & gt; Я забыл, что вопрос от пользователя заключался в том, чтобы избежать разбора самозакрывающихся тегов. В этом случае шаблон проще, превратившись в это:
$pattern = '/<(\w+)(\s+(\w+)\s*\=\s*(\'|")(.*?)\\4\s*)*\s*>/';
Пользователь @ridgerunner заметил, что шаблон не позволяет без кавычек атрибутов или атрибутов без значения. В этом случае тонкая настройка приводит к следующему шаблону:
$pattern = '/<(\w+)(\s+(\w+)(\s*\=\s*(\'|"|)(.*?)\\5\s*)?)*\s*>/';
& lt; / EDIT & gt;
Если кто-то заинтересован в обучении подробнее о шаблоне, я предоставляю некоторую строку:
Небольшой совет: чтобы лучше проанализировать этот код, необходимо посмотреть исходный код, сгенерированный с тех пор, как я не представил любые специальные символы HTML.
Вы можете использовать лямбда для предложения if:
и выполнить условие или.
validates :description, presence: true, if: -> {current_step == steps.first || require_validation}
Если вы не хотите добавлять один метод, как говорит Джаред, вы можете попробовать использовать лямбда
validates :description, presence: true, if: ->{ first_step? || require_validation }
Можете ли вы просто обернуть его одним способом? В соответствии с документами
: if - указывает метод, proc или строку для вызова, чтобы определить, должна ли выполняться проверка (например, если:: allow_validation или если: Proc.new {| user | user.signup_step> 2}). Метод, proc или string должен возвращать или оценивать истинное или ложное значение.
blockquote>validates :description, presence: true, if: :some_validation_check def some_validation_check first_step? || require_validation end
Вы можете передать lambda для оценки как условие if
.
Попробуйте:
validates :description, presence: true, if: -> { first_step? || require_validation }
validates :description, presence: true, if: { first_step? || require_validation }
– Brendon Muir
14 December 2017 в 01:01