大佬教程收集整理的这篇文章主要介绍了正则表达式匹配任一字符串,要么是 int,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我们有以下字符串:
$a = 'a == 1';
$b = 'b == "1"';
$c = "c == '1'";
$d = "d == 'd'";
我想使用正则表达式匹配引号中的数字/元素,在以下情况下:
实际上,我的正则表达式是
((?<guillemet>"|\')(?<valeur>.*?)(\k<guillemet>)|(?<valeur_numerique>\d+))
所以我在结果数组中得到了三个键:'guillemet'、'valeur_numerique' 和 'valeur'。例如对于$a
,我得到
array (
0 => '1','guillemet' => '',1 => '','valeur' => '',2 => '',3 => '','valeur_numerique' => '1',4 => '1',)
是否应该可以简化正则表达式,以便直接获得 valeur
,而不需要关注引号?也就是说,对于 $a,得到
array (
0 => '1','valeur' => '1',)
无需自己编写任何类型的过滤。
不要试图将其全部压成一个(子)模式。定义替代方案更容易。我通常会单独取消引用该值,但可以使用 J
(PCRE2_DUPNAMES) 修饰符。它允许重复的组名。
$pattern = '(
(?<literal>
(?:"(?<value>[^"]*)")| # double quoted value
(?:\'(?<value>[^\']*)\')| # single quoted value
(?:(?<value>[+-]?\d+)) # signed Integer
)
)xJ';
$examples = [
'a == 1','b == "1"',"c == '1'","d == 'd'","some == other"
];
foreach ($examples as $examplE) {
echo $example,"\n";
if (preg_match($pattern,$example,$match)) {
echo json_encode(
array_filter($match,fn($key) => is_String($key),ARRAY_FILTER_USE_KEY),JSON_PRETTY_PRINT
),"\n";
} else {
echo "NO_MATCH\n";
}
}
输出:
a == 1
{
"literal": "1","value": "1"
}
b == "1"
{
"literal": "\"1\"","value": "1"
}
c == '1'
{
"literal": "'1'","value": "1"
}
d == 'd'
{
"literal": "'d'","value": "d"
}
some == other
NO_MATCH
以上是大佬教程为你收集整理的正则表达式匹配任一字符串,要么是 int全部内容,希望文章能够帮你解决正则表达式匹配任一字符串,要么是 int所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。