Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于捕获特殊字符的正则表达式_Java_Regex_Regex Lookarounds_Regex Group - Fatal编程技术网

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])
这将符合:

  • ([a-zA-Z])
    捕获组1,匹配a-Z a-Z
  • ([*+/-])
    捕获组2,匹配*+/-
  • =
    逐字匹配
  • ([a-zA-Z])
    捕获组3,匹配a-Z a-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);