我想对以我知道的字符串开头的变量进行测试;它以一个我不知道的数字结尾,所以我做的测试是:
foreach ($json as $key => $value) {
if ($key == 'IF-MIB::ifDescr.'."$[0-9]")
echo $key . '=>' . $value . '<br/>';
}
我测试了这个,但它不起作用。
答案 0 :(得分:2)
像这样:
$str = 'IF-MIB::ifDescr1';
if(preg_match('/^IF-MIB::ifDescr([0-9]+)$/', $str, $match)){
echo $match[1];
}
输出:
1
所以把它们放在一起用于你的用例:
foreach ($json as $key => $value) {
if (preg_match('/^IF-MIB::ifDescr[0-9]+$/', $key)){
echo $key . '=>' . $value . '<br/>';
}
}
开头的 ^
表示该字符串必须以I开头,而额外的括号加上此时间表示在IF-MIB::ifDescr
之后,可以有任意数量的数字。
只是解释:
^
是字符串的开头IF-MIB::ifDescr
匹配文字字符串[0-9]
字符集0
到9
,+
一次或多次“贪婪”$
字符串结尾并在第一个
(...)
捕获组,用于返回其中匹配的内容。因此$match[1]
是第一个捕获组捕获的内容,$match[0]
是完全匹配。
答案 1 :(得分:1)
您正在寻找testing = [1.5, 1.2, 1.0, 1.0, 1.2, 1.2, 1.5, 1.3, 2.0, 0.7, 0.2, 1.4, 1.2, 1.8, 2.0, 2.1]
# This is the 'map(arr,ref) ->' function
def print_links(a,b):
tt = [a[b[i]-1] for i in range(0,len(a))]
print("map(arr,ref) -> {}".format(tt))
# This tests the re-mapping against an original copy of the array
f = 0
for i in range(0,len(testing)):
if testing[i] == tt[i]:
f += 1
print("{}/{}".format(f,len(a)))
def quick_sort(arr,ref,first=None,last=None):
if first == None:
first = 0
if last == None:
last = len(arr)-1
if first < last:
split = partition(arr,ref,first,last)
quick_sort(arr,ref,first,split-1)
quick_sort(arr,ref,split+1,last)
def partition(arr,ref,first,last):
pivot = arr[first]
left = first+1
right = last
done = False
while not done:
while left <= right and arr[left] <= pivot:
left += 1
while arr[right] >= pivot and right >= left:
right -= 1
if right < left:
done = True
else:
temp = arr[left]
arr[left] = arr[right]
arr[right] = temp
# This is my attempt at preserving indices part 1
temp = ref[left]
ref[left] = ref[right]
ref[right] = temp
temp = arr[first]
arr[first] = arr[right]
arr[right] = temp
# This is my attempt at preserving indices part 2
temp = ref[first]
ref[first] = ref[right]
ref[right] = temp
return right
# Main body of code
a = [1.5,1.2,1.0,1.0,1.2,1.2,1.5,1.3,2.0,0.7,0.2,1.4,1.2,1.8,2.0,2.1]
b = range(1,len(a)+1)
print("The following should match:")
print("a = {}".format(a))
a0 = a[:]
print("ref = {}".format(b))
print("----")
print_links(a,b)
print("\nQuicksort:")
quick_sort(a,b)
print(a)
print("\nThe following should match:")
print("arr = {}".format(a0))
print("ref = {}".format(b))
print("----")
print_links(a,b)
函数将返回preg_match($pattern, $subject, $matches)
和boolean
一个数组,其中包含从您的模式中找到的实例。
人类中的模式$matches
是“以数字值结尾的字符串。”。
/[0-9]$/
将输出:
$word = "asdfñlkas6";
var_dump(preg_match('/[0-9]$/', $word, $matches));
var_dump($matches);
答案 2 :(得分:1)
您可以使用substr()
获取最后一个字符,然后is_numeric()
来检查它是否为数字
foreach ($json as $key => $value) {
if (is_numeric(substr($key, -1))) {
echo $key . '=>' . $value . '<br/>';
}
}
答案 3 :(得分:0)
目前,您只是检查它是否以字符串 $[0-9]
结尾。
您想要做的是对/[0-9]$/
字符串运行 preg_match
。数字后面的美元符号表示它们必须在结束时出现。
foreach ($json as $key => $value) {
if (preg_match("/[0-9]$/", $key) {
echo $key . '=>' . $value . '<br/>';
}
}
请注意,如果您在开始时另外需要其他组件,则可以通过以下方式实现:
foreach ($json as $key => $value) {
if (preg_match("/^IF-MIB::ifDescr([0-9]+)$/", $key) {
echo $key . '=>' . $value . '<br/>';
}
}
开头的^
表示该字符串必须以I
开头,而额外的括号加上此时间表明在IF-MIB::ifDescr
之后,可以有任意数量的数字
希望这会有所帮助:)
答案 4 :(得分:0)
"$[0-9]"
肯定是一个正则表达式,但对于PHP来说,它只是另一个字符串。
您需要使用一个评估正则表达式的函数。 preg_match()
将为您完成这项工作。
在此之前,您应该知道$[0-9]
实际上与您的意图相匹配,因为$
匹配行的结尾或字符串。相反,将其交换到捕获范围的末尾,如下所示 - [0-9]$
。
我们希望匹配IF-MIB::ifDescr1<EOL>
而不是<EOL>IF-MIB::ifDescr1
。
为了确保我们的字符串以IF-MIB::ifDescr
开头,我们使用相对于$
的锚^
- 匹配行或字符串的开头。如果没有这些锚点,您可以匹配<whatever>IF-MIB1::ifDescr1<whatever>
等字符串。
if (preg_match("/^IF-MIB::ifDescr[0-9]$/", $key, $matches)) { ... }
答案 5 :(得分:0)
试试这个:
$str = 'IF-MIB::ifDescr.';
foreach ($json as $key => $value) {
$checker = trim($str,$value);
if(is_numeric($checker ))
echo $key . '=>' . $value . '<br/>';
}
答案 6 :(得分:0)
我个人可能会使用正则表达式,但为了完整性;从最后修剪数字并进行比较:
if(($s = rtrim($key, '0..9')) == 'IF-MIB::ifDescr' && $s != $key)
echo $key . '=>' . $value . '<br/>';
}