Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用正则表达式查找字符串(作为变量号)_Php_Regex - Fatal编程技术网

Php 使用正则表达式查找字符串(作为变量号)

Php 使用正则表达式查找字符串(作为变量号),php,regex,Php,Regex,如何在php中找到某些字符串中的数字 例如,将此文本放在页面中,我希望查找 | | | 12345 | | | 或 | | | 354 | | | 我对数字感兴趣,它们总是根据我访问的页面而变化(数字是页面的id,长度为3-5个字符) 所以我唯一能确定的是数字周围的管道 提前感谢。虽然@S.Kablar的建议非常有效,但它使用的语法对初学者来说可能很难 实现目标的更随意的方式如下: $text = 'your input string'; if (preg_match_all('~\|{3}(\

如何在php中找到某些字符串中的数字

例如,将此文本放在页面中,我希望查找

| | | 12345 | | |
| | | 354 | | |

我对数字感兴趣,它们总是根据我访问的页面而变化(数字是页面的id,长度为3-5个字符)

所以我唯一能确定的是数字周围的管道


提前感谢。

虽然@S.Kablar的建议非常有效,但它使用的语法对初学者来说可能很难

实现目标的更随意的方式如下:

$text = 'your input string';
if (preg_match_all('~\|{3}(\d+)\|{3}~', $text, $matches)) {
    foreach($matches[1] as $number) {
        var_dump($number); // prints smth like string(3) "345"
    }
}
正则表达式的细分:

  • ~
    ~
    环绕表达式
  • \\\124;
    代表管道,它是正则表达式中的特殊字符,必须用反斜杠转义
  • {3}
    说“前面的(管道)必须正好出现三次”
  • 包含一个子模式,以便将其存储在
    $matches[1]
  • \d
    需要一个数字
  • +
    表示“前一个(数字)可以重复,但必须至少有一个实例”

使用此
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\(=/code>
它有很多优点

  • 首先,三个没有量词的文本是一个简单的strncmp()c 呼叫此外,每当正则表达式以断言开始时,它都是 天生就比较慢。因此,这是3人最快的比赛 引导管道符号
  • 其次,使用
    \K
    构造排除以前的内容 从组0中匹配。我们不想把这三根管子插进管道里 匹配,但我们确实想匹配他们
  • 编辑

    请注意,捕获组结果不会存储在特殊字符串中 缓冲区。
    每个组实际上是一个指针(或偏移量)和一个长度。
    指针(或偏移量)指向源字符串中的某个位置。
    提取特定组字符串时,大括号的重载函数
    匹配[#]
    使用指针(或偏移量)和长度创建并返回字符串实例。
    使用
    \K
    构造只需设置组0指针(或偏移量)
    到字符串中表示以下位置的位置:
    \K
    构造后匹配

  • 第三,对3个管道符号使用先行断言不会 就下一个匹配而言,使用符号。这 使这些符号可用于下一个匹配。即: |||
    999
    | |
  • 888| | | |将获得2个匹配项 |||
    999
    ||||
    888
    ||| 结果是一个仅由数字组成的数组

    格式化

     \|\|\|                # 3 pipe symbols
     \K                    # Exclude previous items from the match (group 0)
     \d{3,5}               # 3-5 digits
     (?= \|\|\| )          # Assertion, not consumed, 3 pipe symbols ahead
    

    使用
    (?谢谢,在我学习这个的过程中它会很有用。我检查了你的代码,我认为它会有用。但是字符串对我来说是未知的。谢谢你的解释。到目前为止,我得到了这个解释正则表达式是如何工作的…但是我只知道$text的| | | xxx | | |其中xxx对我来说是未知的。在拥有$text之前…我会在php中获取一个url,searc获取字符串,并找到这6个管道中的内容。最后将其保存在变量$text中。在获得$text后,我想找到数字xd。您的问题是否已解决?如果没有,什么对您不起作用?请缩小问题范围?不,抱歉,没有解决。我将尝试详细解释(对不起我的英语).| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 124你。