我有很多问题需要让正则表达式替换整个字符串。
我需要查找并替换<sup>
标记内的所有数字(并且只替换数字),将其中的每一个包裹在三个大括号内(即{
)。它们可以采用多种书面方式:<sup>1</sup>
<sup>1, 2</sup>
<sup>1, 2, 3</sup>
<sup>1, 2, 3\-4</sup>
<sup>1, 2, 3- 4</sup>
}
<sup>{#<sup>([^<\d]*)(\d+)([^<]*)</sup>#
}</sup>
<sup>{<sup>123</sup>
}, {{{2}}}</sup>
<sup>{{{1}}}, {{{2}}}, {Limit on amount of rows retrieved MySql, Laravel}</sup>
<sup>{{{1}}}, {{{2}}}, {FB.XFBML.parse}\-{{{4}}}</sup>
<sup>{{{1}}}, {{{2}}}, {{{3}}}- {{{4}}}</sup>
这些示例的预期结果应该是:
{{1}}可悲的是,我已经尝试了很多东西但却无法解决问题。一个例子:
{{1}}
它适用于{{1}}示例,并且会将第一个数字与其他示例匹配,但在第一个数字之后却无法获得任何内容。
非常感谢任何帮助和/或线索。
提前致谢!
答案 0 :(得分:2)
由于可能没有嵌套的export class Diary {
@observable loaded = false;
@observable posts = [];
@action getPosts() {
axios({
method: 'get',
url: '/api/diary/',
headers: {'Authorization': "JWT " + sessionStorage.getItem('token')}
}).then(action('response action', (response) => {
(response.data).forEach(function (post) {
/* Associative array is an OBJECT, NOT AN ARRAY ... */
var hiren = {};
hiren['id'] = post['id'];
hiren['title'] = Crypt.decrypt(post['title'], key, post['iv']);
hiren['content'] = Crypt.decrypt(post['content'], key, post['iv']);
hiren['tag'] = post['tag'];
hiren['date'] = moment.utc(post['date']).local().format("dddd, DD MMMM YYYY hh:mm:ss A");
this.posts.push(hiren);
console.log(toJS(this.posts)); // empty array so the push is not working
});
this.loaded = true;
})).catch(function(err) {
console.error(err);
});
}
}
标记,因此您似乎可以使用正则表达式完成此任务。
最简单的方法是匹配所有<sup>
标记(仅仅<sup>
)并将所有数字块替换为回调内所需的内容(使用非常简单的'~<sup>[^<]*</sup>~'
正则表达式) :
'~\d+~'
请参阅PHP demo
如果您希望将1-regex方法与$s = '<sup>1, 2, 3- 124</sup>';
echo preg_replace_callback('~<sup>[^<]*</sup>~', function ($m) {
return preg_replace('~\d+~', '{{{$0}}}', $m[0]);
}, $s);
// => <sup>{
一起使用,请使用基于preg_replace
}, {{{2}}}, {regex demo}- {{{124}}}</sup>
\G
的正则表达式:
~(?:\G(?!\A)[^\d<]*|<sup>[^\d<]*)\K\d+~
请参阅another PHP demo和http://api.jquery.com/category/selectors/:
$s = '<sup>1, 2, 3- 124</sup> 2345';
echo preg_replace('~(?:\G(?!\A)[^\d<]*|<sup>[^\d<]*)\K\d+~', '{{{$0}}}', $s);
// => <sup>{(?:\G(?!\A)[^\d<]*|<sup>[^\d<]*)
}, {{{2}}}, {{{3}}}- {{{124}}}</sup> 2345
<强>详情:
\G(?!\A)[^\d<]*
- 自定义边界,两者之一:
\G(?!\A)
- 上一次成功匹配(<
)的结束,然后是除|
以外的0 +字符和数字<sup>[^\d<]*
- 或<sup>
- <
以及除\K
以外的0 +字符和数字\d+
- 操作员省略当前迭代中到目前为止匹配的整个文本map
- 1+位数答案 1 :(得分:0)
您可以使用此代码:
function sanitizeString($string) {
// matriz de entrada
$what = array('0','1','2','3','4','5','6','7','8','9');
// matriz de saída
$by = array('{{0}}','xml
','{{2}}','{{3}}','{{4}}','{{5}}','{{6}}','{{7}}','{{8}}','{{9}}');
// devolver a string
return str_replace($what, $by, $string);
}
echo sanitizeString("hoje é dia 1 testando o 2");
这是不使用正则表达式的最简单方法。