正则表达式仅获取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中的第一个字符[关闭]的主要内容,如果未能解决你的问题,请参考以下文章