preg_match 名称在输入中最后一个

发布于 2024-12-10 04:51:54 字数 243 浏览 0 评论 0原文

我试图从输入字段获取值,但名称值是最后一个。

<input value="joe" type="hidden" name="firstname">

preg_match('/input value="(.*?)" type="hidden" name="firstname"/', $request, $firstname);

这就是我正在做的,但它不起作用..有人知道如何解决这个问题吗?

I am trying to get the value from a input field, but the name value is last.

<input value="joe" type="hidden" name="firstname">

preg_match('/input value="(.*?)" type="hidden" name="firstname"/', $request, $firstname);

This is what I am doing, but it's not working.. Anyone know how to fix this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

违心° 2024-12-17 04:51:54

识别出 后,您可以使用以下模式提取所有属性(注意值分隔符(单引号、双引号、空格))。

<?php

$input = '<input value="joe" type="hidden" name="firstname">';
$attributes = array();
$pattern = "/\s+(?<name>[a-z0-9-]+)=(((?<quotes>['\"])(?<value>.*?)\k<quotes>)|(?<value2>[^'\" ]+))/i";
if (preg_match_all($pattern, $input, $matches, PREG_SET_ORDER)) {
  $attributes[$match['name']] = $match['value'] ?: $match['value2'];
}
var_dump($input, $attributes);

将导致

$attributes = array(
    'value' => 'joe',
    'type' => 'hidden',
    'name' => 'firstname',
)

https://gist.github.com/1289335

Once you have your <input …> identified, you can use the following pattern to extract all attributes (taking care of the value delimiters (single quote, double quote, space)).

<?php

$input = '<input value="joe" type="hidden" name="firstname">';
$attributes = array();
$pattern = "/\s+(?<name>[a-z0-9-]+)=(((?<quotes>['\"])(?<value>.*?)\k<quotes>)|(?<value2>[^'\" ]+))/i";
if (preg_match_all($pattern, $input, $matches, PREG_SET_ORDER)) {
  $attributes[$match['name']] = $match['value'] ?: $match['value2'];
}
var_dump($input, $attributes);

will result in

$attributes = array(
    'value' => 'joe',
    'type' => 'hidden',
    'name' => 'firstname',
)

https://gist.github.com/1289335

临风闻羌笛 2024-12-17 04:51:54

尝试该正则表达式

input(.*)?(name=\"(\w+)\")(.*)?

并得到第三个结果

Try that regex

input(.*)?(name=\"(\w+)\")(.*)?

and get the 3rd result

岁月流歌 2024-12-17 04:51:54

你的正则表达式很好
preg_match 的最后一个参数返回一个数组

元素 0 = 整个匹配

元素 1 = 第一个括号匹配

$request = '<input value="joe" type="hidden" name="firstname">';

if (preg_match('/input value="(.*?)" type="hidden" name="firstname"/', $request, $matches)) {
    echo "MATCHED: ", $matches[1];
} 

your regex is is fine
the last arg of preg_match returns an array

element 0 = entirematch

element 1 = first parenthesis match

$request = '<input value="joe" type="hidden" name="firstname">';

if (preg_match('/input value="(.*?)" type="hidden" name="firstname"/', $request, $matches)) {
    echo "MATCHED: ", $matches[1];
} 
遮了一弯 2024-12-17 04:51:54

确保您的 参数按此顺序出现在中。请注意,如果您使用 firebug 查看它们,它们会以任意顺序出现。

考虑将硬编码空格“”字符替换为“\s+”以提高稳健性。

Make sure that your <input> parameters appear in this order in the source. Note that they appear in arbitrary order if you look at them with firebug for example.

Consider replacing hardcoded space '' chars with '\s+' to improve robustness.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文