可以将变量声明为正则表达式吗?例如,我有一个匹配两种类型数据的表达式,我想定义一个通知匹配类型的变量。
~ ( \d+ | \w+ ) ~x
它会匹配数字或字符。我想存储匹配数据类型的信息(手动)。例如:
~ ( (?<type>"int") \d+ | <?<type>"string"> \w+ ) ~x
结果将是:
"123" -> { 0: "123", "type": "int", 1: "123" }
"ABC" -> { 0: "ABC", "type": "string", 1: "ABC" }
我得到的最接近的解决方案是定义一个涵盖此类信息的组,并以特定方式命名。
~ ( (?<type_int> \d+) | (?<type_string> \w+) ) ~x
在这种情况下,结果是:
"123" -> { 0: "123", "type_int": "123" }
"ABC" -> { 0: "ABC", "type_string": "ABC" }
答案 0 :(得分:1)
正则表达式并非旨在解决这些问题,但可以采用一种解决方案,尽管这是一种“黑客”:
$text= "some text 1234";
$regex= <<< THISISREGEX
/
(
(\\d++) |
\\w++
)
(?=.*
(?P<type>
(?(2)int|string)
)
)
(?!
.{,9}\$(?<=intstring)
)
/xs
THISISREGEX;
preg_match_all($regex, $text."intstring", $arr);
for ($i=0; $i<sizeof($arr[0]); $i++) {
echo $arr[1][$i]."\t\t".$arr["type"][$i]."\n";
};
输出:
some string
text string
1234 int