我在JavaScript上使用它:
<script type="text/javascript">
var sURL = "http://itunes.apple.com/us/app/accenture-application-for/id415321306?uo=2&mt=8&uo=2";
splitURL = sURL.split('/');
var appID = splitURL[splitURL.length - 1].match(/[0-9]*[0-9]/)[0];
document.write('<br /><strong>Link Lookup:</strong> <a href="http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/wa/wsLookup?id=' + appID + '&country=es" >Lookup</a><br />');
</script>
此脚本使用数字ID并给我415321306。
所以我的问题是如何使用PHP做同样的事情。
最好的问候。
答案 0 :(得分:11)
使用PHP的explode()函数代替.split()。
splitURL = sURL.split('/'); //JavaScript
变为
$splitURL = explode('/', $sURL); //PHP
使用preg_match()代替.match()。
$appID = preg_match("[0-9]*[0-9]", $splitURL);
我对你在字符串长度上所做的事情有点不清楚,但是你可以在php中使用substr()获得子字符串。
答案 1 :(得分:5)
谁需要正则表达式?
<?php
$sURL = "http://itunes.apple.com/us/app/accenture-application-for/id415321306?uo=2&mt=8&uo=2";
$appID = str_replace('id','',basename(parse_url($sURL, PHP_URL_PATH)));
echo $appID; // output: 415321306
?>
答案 2 :(得分:3)
preg_match("/([0-9]+)/",$url,$matches);
print_r($matches);
答案 3 :(得分:1)
您想要的两个功能是:
答案 4 :(得分:1)
Javascript split也可用于将字符串转换为字符数组(空参数),第一个参数可以是RegExp。
/*
Example 1
This can be done with php function str_split();
*/
var str = "Hello World!"
str.split('');
H,e,l,l,o, ,W,o,r,l,d,!
/*
Example 1
This can be done with php function preg_split();
*/
var str = " \u00a0\n\r\t\f\u000b\u200b";
str.split('');
, , , , ,,,
来自Ecma-262 返回一个Array对象,结果的子字符串 已存储将此对象转换为String的操作。该 通过从左到右搜索确定子字符串 分离器的出现;这些事件不属于任何事件 返回数组中的substring,但用于分割String 值。 separator的值可以是任何长度的String或者它 可以是RegExp对象(即,[[Class]]内部的对象 属性是“RegExp”;见15.10)。分隔符的值可以是 空字符串,空正则表达式或正则表达式 可以匹配空字符串。在这种情况下,分隔符不会 匹配输入开头或结尾的空子字符串 字符串,也不匹配末尾的空子字符串 上一个分隔符匹配。 (例如,如果分隔符是 空字符串,字符串被分成单个字符;该 结果数组的长度等于String的长度, 每个子字符串包含一个字符。)如果separator是a 正则表达式,只有在给定位置的第一个匹配 即使回溯可以产生一个,也会考虑这个字符串 该位置的非空子字符串匹配。 (例如, “ab”.split(/ a *?/)计算数组[“a”,“b”],而 “ab”.split(/ a * /)计算数组[“”,“b”]。)如果这个对象 是(或转换为)空String,结果取决于是否 separator可以匹配空String。如果可以,结果数组 不包含任何元素。否则,结果数组包含一个 element,这是空String。如果分隔符是常规的 包含捕获括号的表达式,然后每次 separator与结果匹配(包括任何未定义的结果) 将捕获括号拼接到输出数组中。
答案 5 :(得分:0)
与php等效的javascript函数 (http://kevin.vanzonneveld.net)
<script>
function preg_split (pattern, subject, limit, flags) {
// http://kevin.vanzonneveld.net
// + original by: Marco Marchi??
// * example 1: preg_split(/[\s,]+/, 'hypertext language, programming');
// * returns 1: ['hypertext', 'language', 'programming']
// * example 2: preg_split('//', 'string', -1, 'PREG_SPLIT_NO_EMPTY');
// * returns 2: ['s', 't', 'r', 'i', 'n', 'g']
// * example 3: var str = 'hypertext language programming';
// * example 3: preg_split('/ /', str, -1, 'PREG_SPLIT_OFFSET_CAPTURE');
// * returns 3: [['hypertext', 0], ['language', 10], ['programming', 19]]
// * example 4: preg_split('/( )/', '1 2 3 4 5 6 7 8', 4, 'PREG_SPLIT_DELIM_CAPTURE');
// * returns 4: ['1', ' ', '2', ' ', '3', ' ', '4 5 6 7 8']
// * example 5: preg_split('/( )/', '1 2 3 4 5 6 7 8', 4, (2 | 4));
// * returns 5: [['1', 0], [' ', 1], ['2', 2], [' ', 3], ['3', 4], [' ', 5], ['4 5 6 7 8', 6]]
limit = limit || 0; flags = flags || ''; // Limit and flags are optional
var result, ret=[], index=0, i = 0,
noEmpty = false, delim = false, offset = false,
OPTS = {}, optTemp = 0,
regexpBody = /^\/(.*)\/\w*$/.exec(pattern.toString())[1],
regexpFlags = /^\/.*\/(\w*)$/.exec(pattern.toString())[1];
// Non-global regexp causes an infinite loop when executing the while,
// so if it's not global, copy the regexp and add the "g" modifier.
pattern = pattern.global && typeof pattern !== 'string' ? pattern :
new RegExp(regexpBody, regexpFlags+(regexpFlags.indexOf('g') !==-1 ? '' :'g'));
OPTS = {
'PREG_SPLIT_NO_EMPTY': 1,
'PREG_SPLIT_DELIM_CAPTURE': 2,
'PREG_SPLIT_OFFSET_CAPTURE': 4
};
if (typeof flags !== 'number') { // Allow for a single string or an array of string flags
flags = [].concat(flags);
for (i=0; i < flags.length; i++) {
// Resolve string input to bitwise e.g. 'PREG_SPLIT_OFFSET_CAPTURE' becomes 4
if (OPTS[flags[i]]) {
optTemp = optTemp | OPTS[flags[i]];
}
}
flags = optTemp;
}
noEmpty = flags & OPTS.PREG_SPLIT_NO_EMPTY;
delim = flags & OPTS.PREG_SPLIT_DELIM_CAPTURE;
offset = flags & OPTS.PREG_SPLIT_OFFSET_CAPTURE;
var _filter = function(str, strindex) {
// If the match is empty and the PREG_SPLIT_NO_EMPTY flag is set don't add it
if (noEmpty && !str.length) {return;}
// If the PREG_SPLIT_OFFSET_CAPTURE flag is set
// transform the match into an array and add the index at position 1
if (offset) {str = [str, strindex];}
ret.push(str);
};
// Special case for empty regexp
if (!regexpBody){
result=subject.split('');
for (i=0; i < result.length; i++) {
_filter(result[i], i);
}
return ret;
}
// Exec the pattern and get the result
while (result = pattern.exec(subject)) {
// Stop if the limit is 1
if (limit === 1) {break;}
// Take the correct portion of the string and filter the match
_filter(subject.slice(index, result.index), index);
index = result.index+result[0].length;
// If the PREG_SPLIT_DELIM_CAPTURE flag is set, every capture match must be included in the results array
if (delim) {
// Convert the regexp result into a normal array
var resarr = Array.prototype.slice.call(result);
for (i = 1; i < resarr.length; i++) {
if (result[i] !== undefined) {
_filter(result[i], result.index+result[0].indexOf(result[i]));
}
}
}
limit--;
}
// Filter last match
_filter(subject.slice(index, subject.length), index);
return ret;
}
</script>