在以下测试字符串中,我有2 [image id=""]
。
$string = 'This is a regular test string with [image id="1"] within this sentence. The next sentence (this one) will contain another bbCode tag, [image id="3"].';
我想借助regex提取这些bbCodes中的数字。
preg_match_all('~\[image id=(.+?)]~', $string, $results);
foreach($results AS $dataish) {
echo filter_var($dataish[1], FILTER_SANITIZE_NUMBER_INT);
}
上面的代码会提取数字,但不是1
和3
,而是打印出33
。如果我写$dataish[0]
而不是$dataish[0]
,则会打印出11
。
目的:我想获取image
标记内的ID,以便能够从数据库中显示正确的图像。 [image id="1"]
将显示网站上数据库中ID为1的图像(当然还有用图像替换bbCode)。
请注意,该字符串也只能包含1个[image id=""]
。并不总是它包含多个bbCode。
我该如何做到这一点?
答案 0 :(得分:3)
foreach($results AS $dataish){
$thenumber = filter_var($dataish[1], FILTER_SANITIZE_NUMBER_INT);
}
echo $thenumber;
问题是因为$ results数组有2个值(1和3)当你为它做foreach时,它想要打印两个但是你告诉它只打印$dataish[1];
所以它打印相同的值2次,
解决方案将输出设置为$ thenumber并在}(endforeach)之后打印
我希望这可以帮助你:)。
<强> EDITED 强>
这是另一个解决方案@Erik:)
preg_match_all('~\[image id=(.+?)]~', $string, $results);
for($i=0;$i<sizeof($results);$i++){
echo filter_var($results[0][$i], FILTER_SANITIZE_NUMBER_INT);
}
此解决方案,如果您想要打印多个输出。
答案 1 :(得分:1)
更改正则表达式模式,如下所示:
Array
(
[0] => 1
[1] => 3
)
输出:
class Special extends React.Component {
state = {
speciallist: [],
}
checkFav(i) {
const {
speciallist
} = this.state;
const newList = speciallist.slice()[i]['isFav'] = true;
this.setState = {
speciallist: newList
}
}
renderSpecialItem = () => {
const {
speciallist
} = this.state;
return speciallist.map((item, i) => {
return (
<SpecialItem key={i} isfavourite={item.isFav} onPress={this.checkFav.bind(this, i)}/>
);
});
}
}
答案 2 :(得分:1)
我想你想把你的正则表达式改成这样的东西:
import { DateAdapter, NativeDateAdapter } from '@angular/material';
@Component({
selector: 'foo',
template: ''
})
export class FooComponent {
constructor(dateAdapter: DateAdapter<NativeDateAdapter>) {
dateAdapter.setLocale('de-DE');
}
}
您可以在右侧看到我的测试here及其解释