Regex 挑战性正则表达式
有以下格式的字符串:Regex 挑战性正则表达式,regex,Regex,有以下格式的字符串: 它可以从任意数量的字符串开始,这些字符串由双大括号括起来,可能,它们之间有空格(空格可能出现,也可能不出现) 也可以包含中间用双括号括起来的字符串。 我正在寻找一个正则表达式,它可以将开始和其余部分分开 例如,给定以下字符串: {{a}}{{b}} {{c}} def{{g}}hij 这两部分是: {{a}}{{b}} {{c}} def{{g}}hij 我试过这个: /^({{.*}})(.*)$/ /^({{.*?}})(.*)$/ 但是,它也抓住了中间的g
- 它可以从任意数量的字符串开始,这些字符串由双大括号括起来,可能,它们之间有空格(空格可能出现,也可能不出现)
- 也可以包含中间用双括号括起来的字符串。
{{a}}{{b}} {{c}} def{{g}}hij
这两部分是:
{{a}}{{b}} {{c}}
def{{g}}hij
我试过这个:
/^({{.*}})(.*)$/
/^({{.*?}})(.*)$/
但是,它也抓住了中间的g:
{{a}}{{b}} {{c}} def{{g}}
hij
我试过这个:
/^({{.*}})(.*)$/
/^({{.*?}})(.*)$/
但是,它只捕获了第一个a:
{{a}}
{{b}} {{c}} def{{g}}hij
我想我明白了:
var string = "{{a}}{{b}} {{c}} def{{g}}hij";
console.log(string.match(/((\{\{\w+\}\})\s*)+/g));
// Output: [ '{{a}}{{b}} {{c}} ', '{{g}}' ]
说明:
(
启动一个组(
另一个\{\w+\}
查找{{A-Za-z\u 0-9}
)
关闭第二组\s*
统计空白(如果有))+
关闭第一个组并查找一次或多次出现的OITnot-{{something}
类型数据时,它停止
附言->我想我明白了:
var string = "{{a}}{{b}} {{c}} def{{g}}hij";
console.log(string.match(/((\{\{\w+\}\})\s*)+/g));
// Output: [ '{{a}}{{b}} {{c}} ', '{{g}}' ]
说明:
(
启动一个组(
另一个\{\w+\}
查找{{A-Za-z\u 0-9}
)
关闭第二组\s*
统计空白(如果有))+
关闭第一个组并查找一次或多次出现的OITnot-{{something}
类型数据时,它停止
请注意->我不知道您想要拆分的确切原因,但是如果字符串中始终包含def,并且您想要将字符串从中拆分为两半,那么您可以尝试以下方法:
string text = "{{a}}{{b}} {{c}} def{{g}}hij";
Regex r = new Regex("def");
string[] split = new string[2];
int index = r.Match(text).Index;
split[0] = string.Join("", text.Take(index).Select(x => x.ToString()).ToArray<string>());
split[1] = string.Join("", text.Skip(index).Take(text.Length - index).Select(x => x.ToString()).ToArray<string>());
string text=“{{a}}{{b}{{c}}def{{g}}hij”;
正则表达式r=新正则表达式(“def”);
字符串[]拆分=新字符串[2];
int index=r.Match(text).index;
拆分[0]=string.Join(“,text.Take(index).Select(x=>x.ToString()).ToArray());
split[1]=string.Join(“,text.Skip(index).Take(text.Length-index).Select(x=>x.ToString()).ToArray());
//输出:[{{a}{{b}{{c}',def{{g}}hij']我不知道您想要拆分的确切原因,但是如果字符串中始终包含def,并且您想要将字符串从那里分成两半,那么,您可以尝试以下方法:
string text = "{{a}}{{b}} {{c}} def{{g}}hij";
Regex r = new Regex("def");
string[] split = new string[2];
int index = r.Match(text).Index;
split[0] = string.Join("", text.Take(index).Select(x => x.ToString()).ToArray<string>());
split[1] = string.Join("", text.Skip(index).Take(text.Length - index).Select(x => x.ToString()).ToArray<string>());
string text=“{{a}}{{b}{{c}}def{{g}}hij”;
正则表达式r=新正则表达式(“def”);
字符串[]拆分=新字符串[2];
int index=r.Match(text).index;
拆分[0]=string.Join(“,text.Take(index).Select(x=>x.ToString()).ToArray());
split[1]=string.Join(“,text.Skip(index).Take(text.Length-index).Select(x=>x.ToString()).ToArray());
//输出:[{{a}{{b}{{c}',def{{{g}}hij']使用:
输出:
Array
(
[0] => {{a}}{{b}} {{c}}
[1] => def{{g}}hij
)
如何使用:
输出:
Array
(
[0] => {{a}}{{b}} {{c}}
[1] => def{{g}}hij
)
这将保持匹配
{
、任何非{
或}
字符1次或多次、}
、可能的空白零次或多次,并将其存储在第一个组中。字符串的其余部分将在第二组中。如果没有被{{
和}
包围的部分,则第一组将为空。这是用JavaScript编写的
var str = "{{a}}{{b}} {{c}} def{{g}}hij";
str.match(/^\s*((?:\{\{[^{}]+\}\}\s*)*)(.*)/)
// [whole match, group 1, group 2]
// ["{{a}}{{b}} {{c}} def{{g}}hij", "{{a}}{{b}} {{c}} ", "def{{g}}hij"]
这将保持匹配
{
、任何非{
或}
字符1次或多次、}
、可能的空白零次或多次,并将其存储在第一个组中。字符串的其余部分将在第二组中。如果没有被{{
和}
包围的部分,则第一组将为空。这是用JavaScript编写的
var str = "{{a}}{{b}} {{c}} def{{g}}hij";
str.match(/^\s*((?:\{\{[^{}]+\}\}\s*)*)(.*)/)
// [whole match, group 1, group 2]
// ["{{a}}{{b}} {{c}} def{{g}}hij", "{{a}}{{b}} {{c}} ", "def{{g}}hij"]
您可以使用以下选项:
(爪哇)
(菲律宾)
您可以使用以下选项:
(爪哇)
(菲律宾)
大括号内的字符是否为字母数字(A-Za-z0-9)。是由非{{something}}字符定义的结束。并且将只有一个空格。@HighBoots字符串不必是字母数字。开始的结尾由不在{{}中的内容定义。可以有多个空格。大括号内的字符是字母数字(A-Za-z0-9)。是由非{{something}}字符定义的结束。并且将只有一个空格。@HighBoots字符串不必是字母数字。开始的结尾由不在{{}中的内容定义。可以有多个空格。“def”只是一个例子。。。。大括号内和括号之间的字符串可以是任何字符串。哦,好的!那就忘了我的回答:P谢谢你的信息!“def”只是一个例子。。。。大括号内和括号之间的字符串可以是任何字符串。哦,好的!那就忘了我的回答:P谢谢你的信息!我在PHP:preg_split(“/\\s+(?!{)/”,$mystr)中尝试过这个方法;它不起作用-我将整个示例字符串放在一个块中。@ErelSegalHalevi:对不起,你没有提到你在标记中使用的语言。要使它在PHP中起作用,请删除一个反斜杠。你是对的,它适用于这个字符串,但是,如果我删除“def”之前的单个空格,它返回单个块中的整个字符串。我在PHP中尝试过:preg_split(“/\\s+(?!{)/”,$mystr);它不起作用-我将整个示例字符串放在一个块中。@Erresegalhalevi:很抱歉,您没有提到用于标记的语言。要使其与php一起工作,请删除反斜杠。您是对的,它适用于这个确切的字符串,但是,如果我删除“def”之前的单个空格,它将在单个块中返回整个字符串。