正则表达式仅获取php中的第一个字符[关闭]

Posted

技术标签:

【中文标题】正则表达式仅获取php中的第一个字符[关闭]【英文标题】:Regex to get only first character in php [closed] 【发布时间】:2018-09-08 05:07:55 【问题描述】:

如何获取字符串唯一的第一个字符?

^1##2##3^1##22##33^1##22##333^1##2##444

输出: 1

如果字符串是:

 ^71##2##3^1##22##33^71##22##333^71##2##444

输出:

71

只想获取 ^ 和 ## 之间的 1。

【问题讨论】:

已在上面编辑。请检查 类似^\W*\K\w+ 的东西?您的问题仍然有点不清楚,您可能需要提供更多示例或告诉我们您所说的“字符”是什么意思。 好的,谢谢!!!! preg_match('~\d+~', $s, $m) 然后$m[0] 你得到答案了吗? 【参考方案1】:

我从 this post 检查了从两个字符串中获取字符串:

function get_string_between($string, $start, $end)
    $string = ' ' . $string;
    $ini = strpos($string, $start);
    if ($ini === false) return '';
    $ini += strlen($start);
    $len = strpos($string, $end, $ini) - $ini;
    return substr($string, $ini, $len);


$fullstring = '^71##2##3^1##22##33^71##22##333^71##2##444';
$parsed = get_string_between($fullstring, '^', '##');

echo $parsed; // (result = 71)

输出将是 71,因为此函数返回第一个匹配值...

【讨论】:

我建议您在从 strpos 进行比较时始终使用 ===。含义 if ($ini == 0) return ''; 应该是 if ($ini === flase) return ''; 因为 strpos 将在未找到时返回 false,并且 false == 0。但是 false !== 0。 谢谢@Andreas 我从这里引用php.net/manual/en/function.strpos.php 并更新了我的答案...【参考方案2】:

您只需要找到以^ 为前缀并后跟两个哈希的字符的第一次出现:

/\^([^\^#]+?)##/

执行以下操作:

    \^ 找到一个 ^ 字符。它需要被转义,因为^ 是正则表达式中的一个特殊字符。 ([^\^#]+?)## 查找最短的字符,它们不是^# 本身,并且后跟两个散列。如果输入^### 应该返回#,因为它是一个以^ 为前缀并后跟两个哈希的字符,只需从[^\^#] 中删除# 以匹配它。

【讨论】:

以上是关于正则表达式仅获取php中的第一个字符[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

从字符串正则表达式 PHP 中提取数值 [关闭]

如何使用模式匹配器仅获取与 Java 中正则表达式匹配的第一行?

仅匹配指定字符的最后一次出现的正则表达式

php 正则表达式 提取字符串内小括号中的数字,只要数字

输出导致与正则表达式不匹配的第一个字符

正则表达式 - 从 PHP 中的 html 字符串获取表格