По умолчанию сумматор *
является «жадным», что означает, что (.*)
будет соответствовать всем возможностям. Для того, чтобы ограничить его таким образом, чтобы он соответствовал как можно меньше, то есть только до следующей двойной кавычки, что происходит в строке, не добавить ?
к нему, таким образом:
($txid) = $content =~ m/<input name="transactionid" value="(.*?)" type="hidden">/;
Предполагая, что значение атрибута value
не содержит экранированные двойные кавычки, это приведет к результату, который вам нужен.
(Конечно, в тех случаях, когда является избежал двойных кавычек, не регулярное выражения, которое будет надежно извлечь только строку интереса и ничего. Вот почему люди говорят вам не использовать регулярные выражения в качестве единственного инструмента для синтаксического анализа сбалансированного текста. С другой стороны, учитывая простоту вашей цели здесь, вы, вероятно, сойдете с ним - но ни для чего, и я имею в виду что-нибудь, что требует обработки HTML или XML, которая даже немного сложнее чем это, используйте синтаксический анализатор XML.)
Вопрос действительно правдоподобен * not * с кавычками. (a) Не анализируйте HTML с регулярными выражениями, это связано с созданием хрупких решений. (b) Какой вклад у вас есть? Покажите нам пример. – amon
['" Это не работает "'] (http://tlp-perl.blogspot.se/2013/06/its-not-working.html) - не очень хороший способ описать вашу проблему. – TLP
Входной способ является большим, чтобы надеть здесь, это веб-страница HTML. Первый, я только что сделал строку «start hello stop», которая вернула «привет» правильно. Вторая возвращает пустую переменную. Я проверил, и $ content заполнен правильными данными, мне просто нужно захватить значение скрытого поля «transactionid». – user1796225