【问题标题】:Help with getting values through regex (php)帮助通过正则表达式(php)获取值
【发布时间】:2009-07-09 19:22:38
【问题描述】:

所以,是的,我很讨厌正则表达式。需要用php来完成。谢谢。 我需要能够提取“xx”(始终是 2 个小写字母字符)和“a12”(可以是任何东西,但始终是 .php)。

String:
http://foo.bar.com/some_directory/xx/a12.php?whatever=youwant

【问题讨论】:

  • 请注意 - 到目前为止,一些响应似乎不小心忘记在正则表达式中转义一两个正斜杠,因此无论哪个答案适合您,请务必仔细检查或PHP 可能会向您抛出关于未知修饰符等的垃圾。干杯!

标签: php regex


【解决方案1】:

由于他正在寻找 PHP 解决方案而不仅仅是 PCRE,我认为这样的东西可能更全面:

$src = 'http://foo.bar.com/some_directory/xx/a12.php?whatever=youwant';
preg_match( '/([a-z]{2})\/([^\/]+)\.php/', $src, $matches );
/* grab "xx" */
$first = $matches[1];
/* grab "a12" */
$second = $matches[2];

【讨论】:

  • 我选择了这个,因为它是唯一一个在运行时没有出错的。我还发现添加 some_directory\/ 以确保我有一个有效的匹配项很有帮助。
  • 好电话。我在 xx/a12.php 片段上获得了隧道视野,甚至没有考虑字符串的其余部分 - 当然,您可以将其构建到正则表达式中或事先进行一些验证,例如 if ( strpos( $ src, 'foo.bar.com/some_directory' ) === 0 ) { // 正则表达式的东西 } else { // 错误的东西 }
【解决方案2】:
"([a-z]{2})\/([^/]+)\.php"

确保您正在捕获匹配项。 xx 属于第 1 组,a12 属于第 2 组

【讨论】:

  • 我认为在末尾使用 + 而不是 * 是完全合理的 - 这是对虚假数据的额外检查,因为它确保文件名不仅仅是扩展名。两者都可以,但没有理由不进行额外的验证。
【解决方案3】:

/([a-z]{2})/([a-zA-Z0-9_-]+)

$string = http://foo.bar.com/some_directory/xx/a12.php?whatever=youwant


$matches;
preg_match("/([a-z]{2})/([a-zA-Z0-9_\-]+)", $string, $matches);

$part_1 = $matches[1]; //xx
$part_2 = $matches[2]; //a12

祝你好运!

【讨论】:

    猜你喜欢
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    相关资源
    最近更新 更多