我正在尝试创建自己的路由类 - 我解析有效的网址时遇到了热门问题。
这是一个示例网址: http://localhost/app/module/command/i15
我需要在slash之后的每个元素成为使用php中的preg_match创建数组的附加元素。
所以 - 搜索我得到的数字:([0-9] +) 搜索包含字母的字符串,符号 - 或_我有([^。] +)(这是问题)
整个正则表达式如下:
(app)\/(module)\/([^.]+)\/i([0-9]+)
我想要一个包含5个元素的数组,类似于:
0 => app, 1=> module, 2 => command, 3 => i15
如果preg_match只会返回类似的东西,那将会更美:
0 => app, 1=> module, 2 => command, 3 => 15
(没有我作为参数标识符)
任何人都可以快速帮助我吗?我坚持了2天,找不到合适的解决方案。
编辑: 我有一些预定义的正则表达式:
/app/contacts/list => (app)\/(contacts)\/([^.]+)
/app/contacts/edit/i15 => (app)\/(contacts)\/([^.]+)\/i([\d]+)
/app/contacts/view/i15-c2 => (app)\/(contacts)\/([^.]+)\/i([\d]+)-c([\d]+)
对于所有这些我准备不同的正则表达式如上所述。当我需要解析之间的问题时问题明星:
/app/contacts/preview/random-name/i15-c2
或
/app/contacts/preview/random-name-i15-c2
([^。] +)也捕获\(斜杠) - 并且在上面的第一个例子中,这个斜线打破了整个正则表达式: - (
编辑第二次: - )
我为某些路径准备了一些预定义的regexp。让我们来看看:
$regexp = [
[0 => '(app)\/([^/]+)'],
[1 => '(app)\/([^/]+)\/i([0-9]+)']
];
接下来我检查当前网址并匹配最佳结果 - 我知道我想要什么,但php不知道用户选择了什么:
如果我输入带路径的网址:
应用程序/用户名/ I15
系统向我显示$ regexp [0]是最好的结果 - 它不是真的,因为$ regexp [1]是最好的。
我希望这能解释我的问题。
答案 0 :(得分:0)
由于您正在使用组捕获正则表达式,因此可以使用它们来创建所需的数组。将变量传递给Process root = Runtime.getRuntime().exec("su");
txPrint1.append("\n \n root GRANTED \n \n");
以存储组:
array_push($arra,{"letter":substr($key,3),"frequency":$value});
现在array_push($arra,array("letter"=>substr($key,3),"frequency"$value));
的第一个元素是整个匹配,然后是组。
preg_match()
答案 1 :(得分:0)
好的继承我的路由类: https://gist.github.com/djmassive/d7487cef92e3adb1abf7ca31d3e96a53
整个魔法在方法解析()
中完成我添加了路线:
$route->get('(app)\/:string', [ 'schema' => '2', 'module' => 'system', 'file' => 'profile' ]);
$route->get('(app)\/:string\/i:id', [ 'schema' => '2,3', 'module' => 'system', 'file' => 'profile', 'command' => 'view' ]);
如果我有网址: app / list - 系统读取它: $ command是list(schema显示第二个元素) - works
应用程序/用户名/ I15 应该查看$命令 $ id应为[username,15]
在这种情况下,第一个regexp显示66%的匹配,如第二个 - 但第二个应该是100%
看看debuging:
Checking regexp: #(app)\/([^/]+)# - to match path: app/username/i15
Results preg_match \$matches array:
Array ( [0] => app/username [1] => app [2] => username )
Percentage match: 66.6666666667%
Checking regexp: #(app)\/([^/]+)\/i([\d]+)# - to match path: app/username/i15
Results preg_match \$matches array:
Array ( [0] => app/username/i15 [1] => app [2] => username [3] => 15 )
Percentage match: 66.6666666667%
我们看到,第一个正则表达式并不好,因为没有第三个元素。
据我所知,整个问题主要是不返回不满足的条件。