Java 要测试的正则表达式'_';

Java 要测试的正则表达式'_';,java,regex,Java,Regex,如何使用正则表达式检查字符串中的“\”是否为正则表达式 例如:_a,a_ab_a_b.使用Java,您可以使用: 使用Java,您可以使用: 你使用这个模式 “^(?=.*..*.$”以确保字符串中有“.” 或 '^(?。*.*.*.$'或'^(?=[^.]*)$'以确保它不在那里 但单独使用这一点是没有意义的。它必须是更大模式的一部分 编辑 我必须做一个更具解释性的回答,并纠正上述模式 我快速地写下了上面的答案,没有测试提议的模式。我的想法是,而且是,没有理由使用它们“裸体”,因为,正如科

如何使用正则表达式检查字符串中的“\”是否为正则表达式

例如:_a,a_ab_a_b.

使用Java,您可以使用:

使用Java,您可以使用:

你使用这个模式

“^(?=.*..*.$”
以确保字符串中有“.”

'^(?。*.*.*.$'
'^(?=[^.]*)$'
以确保它不在那里

但单独使用这一点是没有意义的。它必须是更大模式的一部分

编辑 我必须做一个更具解释性的回答,并纠正上述模式

我快速地写下了上面的答案,没有测试提议的模式。我的想法是,而且是,没有理由使用它们“裸体”,因为,正如科比“强调”的那样:),可以在没有正则表达式的情况下测试'.的存在,因此,当这是唯一的目的时,最好按照他的建议去做

但是我写下了我的答案,第一个是给渴望知道的提问者一个暗示,第二个是给能写出更大模式的暗示

我的想法是,这3个基本模式中的一个可以与搜索某些特定字符串的所有其他实际模式相关联

这个答案写得太快导致我在三种模式中犯了一个错误

例如,我首先编写了
“^(?=.*...*$)”
。但是我在发布之前对它进行了修改,我的想法是在
'^(?=.*..*.
'$之间插入一个更大的模式的其余部分。没错,必须在结尾字符
“$”
之前插入一个补码,这意味着“字符串的结尾在这里”。但事实是,3个正确的模式中的每一个都必须保持括号内的
“$”
字符不变

“裸体”错误图案包括:

'^(?=.*_.*)$'
'^(?!.*_.*)$'
'^(?=[^_]*)$'

正确的是:

'^(?=.*_.*$)'
'^(?!.*_.*$)'
'^(?=[^_]*$)'
然后,根据您想要捕捉的内容向它们添加互补的基本模式

例如,如果要捕获字符串中不能有下划线的第一个数字,则模式为:

'^(?=[^_]*$).*?(\d+)'
第1组将捕获字符串“kfgv 123 tg 4567 jkfv”中的数字

但是现在,如果您想捕获最后一个数字(=字符串末尾的越近),其中不能有任何UnderCore,则模式必须为:

'^(?=[^_]*$).*?(\d+)[^\d]*$'
在这种情况下,填充模式中有两个字符
'$'
,重要的一点是
'$'
中的
'$'
是绝对必要的,因为在此位置没有此字符,将出现错误结果:

'^(?=[^\u]*).*(\ d+[^\d]*$”
与字符串'kfg_v 123 tg 4567 jkfv'匹配,而组1与'4567'匹配,但由于分析字符串中有下划线,因此不应匹配

相反,
“^(?=[^\u]*$).*?(\ d+)[^\d]*$”
与同一个字符串不匹配,这是它的目标。

您使用该模式

“^(?=.*..*.$”
以确保字符串中有“.”

'^(?。*.*.*.$'
'^(?=[^.]*)$'
以确保它不在那里

但单独使用这一点是没有意义的。它必须是更大模式的一部分

编辑 我必须做一个更具解释性的回答,并纠正上述模式

我快速地写下了上面的答案,没有测试提议的模式。我的想法是,而且是,没有理由使用它们“裸体”,因为,正如科比“强调”的那样:),可以在没有正则表达式的情况下测试'.的存在,因此,当这是唯一的目的时,最好按照他的建议去做

但是我写下了我的答案,第一个是给渴望知道的提问者一个暗示,第二个是给能写出更大模式的暗示

我的想法是,这3个基本模式中的一个可以与搜索某些特定字符串的所有其他实际模式相关联

这个答案写得太快导致我在三种模式中犯了一个错误

例如,我首先编写了
“^(?=.*...*$)”
。但是我在发布之前对它进行了修改,我的想法是在
'^(?=.*..*.
'$之间插入一个更大的模式的其余部分。没错,必须在结尾字符
“$”
之前插入一个补码,这意味着“字符串的结尾在这里”。但事实是,3个正确的模式中的每一个都必须保持括号内的
“$”
字符不变

“裸体”错误图案包括:

'^(?=.*_.*)$'
'^(?!.*_.*)$'
'^(?=[^_]*)$'

正确的是:

'^(?=.*_.*$)'
'^(?!.*_.*$)'
'^(?=[^_]*$)'
然后,根据您想要捕捉的内容向它们添加互补的基本模式

例如,如果要捕获字符串中不能有下划线的第一个数字,则模式为:

'^(?=[^_]*$).*?(\d+)'
第1组将捕获字符串“kfgv 123 tg 4567 jkfv”中的数字

但是现在,如果您想捕获最后一个数字(=字符串末尾的越近),其中不能有任何UnderCore,则模式必须为:

'^(?=[^_]*$).*?(\d+)[^\d]*$'
在这种情况下,填充模式中有两个字符
'$'
,重要的一点是
'$'
中的
'$'
是绝对必要的,因为在此位置没有此字符,将出现错误结果:

'^(?=[^\u]*).*(\ d+[^\d]*$”
与字符串'kfg_v 123 tg 4567 jkfv'匹配,而组1与'4567'匹配,但由于分析字符串中有下划线,因此不应匹配

相反,
“^(?=[^\u]*$).*?(\d+)[^\d]*$”
与同一字符串不匹配,这是它的目标。