Java 用于捕获特殊字符的正则表达式
我试图用正则表达式替换字符串,我需要的基本是转换类似赋值的代码:Java 用于捕获特殊字符的正则表达式,java,regex,regex-lookarounds,regex-group,Java,Regex,Regex Lookarounds,Regex Group,我试图用正则表达式替换字符串,我需要的基本是转换类似赋值的代码: k*=i 进入 在我的例子中: jregex.Pattern p=new jregex.Pattern("([a-z]|[A-Z])([a-z]|[A-Z]|\\d)*[\\+|\\*|\\-|\\/][=]([a-z]|[A-Z])*([a-z]|[A-Z]|\\d)"); Replacer r= new Replacer(p,"1=$1,2=$2,3=$3,4=$4,5=$5,6=$6,7=$7,8=$8"); String
k*=i
进入
在我的例子中:
jregex.Pattern p=new jregex.Pattern("([a-z]|[A-Z])([a-z]|[A-Z]|\\d)*[\\+|\\*|\\-|\\/][=]([a-z]|[A-Z])*([a-z]|[A-Z]|\\d)");
Replacer r= new Replacer(p,"1=$1,2=$2,3=$3,4=$4,5=$5,6=$6,7=$7,8=$8");
String result=r.replace("k*=i");
正则表达式似乎没有提取特殊字符
(在本例中:+,-,*,/,=)
因此,我得到的结果是:
1=k,2=,3=,4=i,5=,6=,7=,8=
(我只能提取k&I)
我如何解决这个问题 您可以在一个角色类中使用3个捕获组和捕获*+/-
([a-zA-Z])([*+/-])=([a-zA-Z])
这将符合:
捕获组1,匹配a-Z a-Z([a-zA-Z])
捕获组2,匹配*+/-([*+/-])
逐字匹配=
捕获组3,匹配a-Z a-Z([a-zA-Z])
$1=$1$2$3
在这里,我们可以设计为类似以下表达式:
(.+)[*+-/]=(.+)
我们在开始和结束时使用这两个捕获组捕获我们的k
和i
:
(.+)
如果愿意,我们可以添加更多边界,例如开始字符和结束字符:
^(.+)[*+-/]=(.+)$
试验
正则表达式电路
可视化正则表达式:
像这样尝试([a-z])([*+-/])=(i)
并替换为$1=$2$3
^(.+)[*+-/]=(.+)$
import java.util.regex.Matcher;
import java.util.regex.Pattern;
final String regex = "(.+)[*+-/]=(.+)";
final String string = "k*=i\n"
+ "apple*=orange";
final String subst = "$1=$1+$2";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
// The substituted value will be contained in the result variable
final String result = matcher.replaceAll(subst);
System.out.println("Substitution result: " + result);