正则表达式在第一个空格后排除

时间:2015-05-22 14:29:04

标签: php regex

<?php

$url = '/#123_abc" data-text="something-something"';
preg_match_all ('(/#.*)', $url, $result);


var_dump($result);

我怎样才能获得/#123_abc?我想排除data-text="something-something"

3 个答案:

答案 0 :(得分:2)

您可以使用否定字符类

/(^\/#[^"]+)/
  • ^在开始时锚定正则表达式

  • [^"]+否定字符类,匹配"以外的任何其他字符。

    +量化模式,匹配一个或多个出现。

Regex Demo

<强>测试

$url = '/#123_abc" data-text="something-something"';
preg_match_all ('/(^\/#[^"]+)/', $url, $result);
var_dump($result[0]);
// => Outputs
// /#123_abc

<小时/> P.S:您可以通过使用不同的分隔符对来阻止\的转义

$url = '/#123_abc" data-text="something-something"';
preg_match_all ('~(^/#[^"]+)~', $url, $result);
var_dump($result[0]);
// => Outputs
// /#123_abc

答案 1 :(得分:2)

*是一个贪心运算符,它尽可能地消耗。请改用正则表达式标记\w

$url = '/#123_abc" data-text="something-something"';
preg_match('~/#\w+~', $url, $result);
echo $result[0]; //=> "/#123_abc"

答案 2 :(得分:0)

您可以使用以下正则表达式:

/\#\S+?(?=")

说明:

  • / - 字面正斜杠
  • \# - 文字哈希符号
  • \S+? - 一个或多个非空白符号
  • (?=") - 检查我们是否找到双引号的正面预测。

Sample code

$url = '/#123_abc" data-text="something-something"';
preg_match_all('#/\#\S+?(?=")#', $url, $result);
print_r($result[0]);

输出:

Array
(
    [0] => /#123_abc
)