求一Java 正则表达式 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 一不注意就按了回车就自动提交了,我的正文都还没写,也不止这个分数,这自动提交的功能可是不太好啊String str="between value1 inclusion value2 exclusion" //相当于>=value1 and <value2//想通过正则表达式把value用一对'号括起来,如下String str="between 'value1' inclusion 'value2' exclusion"//说明://1.value1及value2都可以有空格//2.inclusion、exclusion都有两种情况的可能,即:inclusion或是exclusion String str="users program value1 with input=value2"//通过正则表达式把users program换成program、with input换成input//把value用'括起来,同样,value可以有空格,如下: String str="program 'value1' input='value2'" 呵呵.为什么不用Oracle的"between value1 and value2"呢?这个更适合你说的>=value1 and <=value2另外,这么简单的替换基本上不用正则表达式.就用string本身的replace即可如:String str = "between value1 and value2";str = str.replace("value1", 123);str = str.replace("value2", 234); 也许是我没说清楚所谓value1及value2当然是未知,楼上的方法当然行不通,再说我的表达式里一定得有inclusion或exclusion,这是一种格式String str="between value1 inclusion/exclusion value2 inclusion/exclusion" // 表达式中的/表或,二选一 package Test;import java.util.regex.*;public class qdb{ public static String f(String input,String regex) { Pattern p=Pattern.compile(regex); Matcher m=p.matcher(input); StringBuffer sb=new StringBuffer(); while(m.find()) { System.out.println(m.group(1)); m.appendReplacement(sb,"replace "); } m.appendTail(sb); return sb.toString(); } public static void main(String[] args) { String input="between value1 inclusion value2 exclusion"; String regex="(\\w+)\\s*(?=exclusion|inclusion)"; System.out.println(f(input,regex)); }}没看明白题目,不知道是不是这意思? between后面加个单引号,and前后加个单引号str结束之前加个单引楼主按照这么操作str试试! package Test;import java.util.regex.*;public class qdb{ public static String f(String input,String regex) { Pattern p=Pattern.compile(regex); Matcher m=p.matcher(input); StringBuffer sb=new StringBuffer(); while(m.find()) { m.appendReplacement(sb,"'"+m.group(1)+"'"); } m.appendTail(sb); return sb.toString(); } public static void main(String[] args) { String input="between value1 inclusion value2 exclusion"; String regex="(\\w+)(?=\\s*exclusion|\\s*inclusion)"; System.out.println(f(input,regex)); }}给分吧,嘿嘿~ package Test;public class qdb{ public static String f(String input) { String[] ss=input.split(" "); StringBuffer sb=new StringBuffer(); for(int i=0;i<ss.length;i++) { String s=ss[i]; sb.append(s); if(i+1<ss.length&&(s.equals("between")||s.equals("inclusion")||s.equals("exclusion"))) { sb.append(" "); sb.append("'"); } else if(i+1<ss.length&&(ss[i+1].equals("inclusion")||ss[i+1].equals("exclusion"))) { sb.append("'"); sb.append(" "); } else { sb.append(" "); } } return sb.toString(); } public static void main(String[] args) { String str="between val dfdsf ue1 inclusion val dsfsdaf dsfsdfsdafasdf sdaf e2 exclusion"; System.out.println(f(str)); }}直接解析~ 呵呵.为什么不用Oracle的"between value1 and value2"呢?这个更适合你说的>=value1 and <=value2 另外,这么简单的替换基本上不用正则表达式.就用string本身的replace即可 如:String str = "between value1 and value2";str = str.replace("value1", 123);str = str.replace("value2", 234); package Test;import java.util.regex.*;public class qdb{ public static String f(String input,String regex) { Pattern p=Pattern.compile(regex); Matcher m=p.matcher(input); while(m.find()) { input=input.replace(m.group(1),"'"+m.group(1)+"'"); } return input; } public static void main(String[] args) { String input="between val ue 123 21 1 inclusion va lu asdas e2 exclusion"; String input1="between val ue 123 21 1 inclusion va lu asdas e2 inclusion"; String input2="between val ue 123 21 1 exclusion va lu asdas e2 exclusion"; String regex="(?:between|inclusion|exclusion)\\s*(.+?)\\s*(?=exclusion|inclusion)"; System.out.println(f(input,regex)); System.out.println(f(input1,regex)); System.out.println(f(input2,regex)); }}String regex="(?:between|inclusion|exclusion)\\s*(.+?)\\s*(?=exclusion|inclusion)";between,inclusion,exclusion 与exclusion,inclusion 中间夹杂的字符串加'应该没啥问题了吧? 謝謝qiandongbo,你的方法好像有點對了,我再進一步測試一下先。 OK,有错误告诉我,我先去看会动漫,为了这120分动漫都米看 T-T~ String input="between val ue 123 21 1 inclusion exclusion"; String input1="between inclusion va lu asdas e2 inclusion"; //得出的結果為:between' '' '' ''val' '' 'ue' '123' '21' '1'' '' '' 'inclusion' '' 'exclusionbetween 'inclusion va lu asdas e2' inclusion//理想的結果為:between 'val ue 123 21 1' exclusion '' exclusionbetween '' exclusion 'va lu asdas e2' exclusion package Test;import java.util.regex.*;import java.util.*;public class qdb{ public static String f(String input,String regex) { ArrayList<String> list=new ArrayList<String>(); Pattern p=Pattern.compile(regex); Matcher m=p.matcher(input); StringBuffer sb=new StringBuffer(); while(m.find()) { System.out.println(m.group(1)+","); m.appendReplacement(sb, "'"+m.group()+"'"); } m.appendTail(sb); return sb.toString(); } public static void main(String[] args) { String input="between val ue 123 21 1 inclusion exclusion"; String input1="between inclusion va lu asdas e2 inclusion"; String input2=" between dsfsdaf fgdsfgs v alue exclusion va inclusion "; String regex="(?<=between|inclusion|exclusion)(.+?)\\s(?=exclusion|inclusion)"; System.out.println(f(input,regex)); System.out.println(f(input1,regex)); }}闷了半天,楞是没想去怎么把匹配好的完整的放回去,改了这个方法,不过这个很影响效率~ public class HelloWorld { private static final String PATTERN1 = "^between(.+?)(inclusion|exclusion)(.+?)(inclusion|exclusion)$"; private static final String PATTERN2 = "^users program(.+?)with input=(.+?)$"; public static void main(String[] args) { String input = "between val ue 123 21 1 inclusion exclusion"; String input1 = "between inclusion va lu asdas e2 inclusion"; System.out.println(testPattern1(input)); System.out.println(testPattern1(input1)); String str = "users program value1 with input=value2"; String str1 = "users program val ue 123 21 1 with input= va lu asdas e2 "; System.out.println(testPattern2(str)); System.out.println(testPattern2(str1)); } /** * @param str * String str="between value1 inclusion value2 exclusion" */ public static String testPattern1(String str) { str = str.replaceAll(PATTERN1, "$1 between $2 between $3 between $4"); String[] parts = str.split("\\bbetween\\b"); return "between '" + parts[0].trim() + "' " + parts[1].trim() + " '" + parts[2].trim() + "' " + parts[3].trim(); } /** * @param str * String str="users program value1 with input=value2"; */ public static String testPattern2(String str) { str = str.replaceAll(PATTERN2, "$1 with $2"); String[] parts = str.split("\\bwith\\b"); return "program '" + parts[0].trim() + "' input='" + parts[1].trim() + "'"; }}between 'val ue 123 21 1' inclusion '' exclusionbetween '' inclusion 'va lu asdas e2' inclusionprogram 'value1' input='value2'program 'val ue 123 21 1' input='va lu asdas e2' 谢谢各位先qiandongbo最后的那个方法又有了新的问题,本应是:between 'val ue 123 21 1' exclusion '' exclusion却变成了:between' val ue 123 21 1 'exclusion' 'exclusion在value的两边都加多了空格,而between与'号之前却没了空格rcom10002的方法基本上能够实现,但当有下列情形时会报错String input = "between val ue 123 21 1 inclusion ";上面这种情况是不满足条件的,一定要是如下格式才行,否则最好是返回nullString str="between value1 inclusion/exclusion value2 inclusion/exclusion" // 表达式中的/表或,二选一而对于String str="users program value1 with input=value2"with input=value2这一部分可以省略,即为String str="users program value1"再次感谢各位! PreparedStatement.executeBatch()效率低的问题 字节流无法读取到二进制数据的-1标志 utf8编码问题,弄了好长时间,请大家帮个忙 一个非常奇怪的函数重写 FileNotFoundException JAVA图形开发中最常用什么工具? java连接sqlserver 2000的问题? 简单数学问题,急死了。在线等待。 不想学JAVA的请进 Java 网络编程---SL275练习题疑惑 要开发JDK,服务端需要安装什么 关于stringbuffer的一个问题 统计页面点击次数失败
String str="between 'value1' inclusion 'value2' exclusion"//说明:
//1.value1及value2都可以有空格
//2.inclusion、exclusion都有两种情况的可能,即:inclusion或是exclusion
String str="users program value1 with input=value2"//通过正则表达式把users program换成program、with input换成input
//把value用'括起来,同样,value可以有空格,如下:
String str="program 'value1' input='value2'"
另外,这么简单的替换基本上不用正则表达式.就用string本身的replace即可
如:String str = "between value1 and value2";
str = str.replace("value1", 123);
str = str.replace("value2", 234);
所谓value1及value2当然是未知,楼上的方法当然行不通,再说我的表达式里一定得有inclusion或exclusion,这是一种格式String str="between value1 inclusion/exclusion value2 inclusion/exclusion" // 表达式中的/表或,二选一
package Test;
import java.util.regex.*;
public class qdb
{
public static String f(String input,String regex)
{
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(input);
StringBuffer sb=new StringBuffer();
while(m.find())
{
System.out.println(m.group(1));
m.appendReplacement(sb,"replace ");
}
m.appendTail(sb);
return sb.toString();
}
public static void main(String[] args)
{
String input="between value1 inclusion value2 exclusion";
String regex="(\\w+)\\s*(?=exclusion|inclusion)";
System.out.println(f(input,regex));
}
}没看明白题目,不知道是不是这意思?
str结束之前加个单引楼主按照这么操作str试试!
package Test;
import java.util.regex.*;
public class qdb
{
public static String f(String input,String regex)
{
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(input);
StringBuffer sb=new StringBuffer();
while(m.find())
{
m.appendReplacement(sb,"'"+m.group(1)+"'");
}
m.appendTail(sb);
return sb.toString();
}
public static void main(String[] args)
{
String input="between value1 inclusion value2 exclusion";
String regex="(\\w+)(?=\\s*exclusion|\\s*inclusion)";
System.out.println(f(input,regex));
}
}给分吧,嘿嘿~
package Test;
public class qdb
{
public static String f(String input)
{
String[] ss=input.split(" ");
StringBuffer sb=new StringBuffer();
for(int i=0;i<ss.length;i++)
{
String s=ss[i];
sb.append(s);
if(i+1<ss.length&&(s.equals("between")||s.equals("inclusion")||s.equals("exclusion")))
{
sb.append(" ");
sb.append("'");
}
else if(i+1<ss.length&&(ss[i+1].equals("inclusion")||ss[i+1].equals("exclusion")))
{
sb.append("'");
sb.append(" ");
}
else
{
sb.append(" ");
}
}
return sb.toString();
}
public static void main(String[] args)
{
String str="between val dfdsf ue1 inclusion val dsfsdaf dsfsdfsdafasdf sdaf e2 exclusion";
System.out.println(f(str));
}
}直接解析~
另外,这么简单的替换基本上不用正则表达式.就用string本身的replace即可
如:String str = "between value1 and value2";
str = str.replace("value1", 123);
str = str.replace("value2", 234);
import java.util.regex.*;
public class qdb
{
public static String f(String input,String regex)
{
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(input);
while(m.find())
{
input=input.replace(m.group(1),"'"+m.group(1)+"'");
}
return input;
}
public static void main(String[] args)
{
String input="between val ue 123 21 1 inclusion va lu asdas e2 exclusion";
String input1="between val ue 123 21 1 inclusion va lu asdas e2 inclusion";
String input2="between val ue 123 21 1 exclusion va lu asdas e2 exclusion";
String regex="(?:between|inclusion|exclusion)\\s*(.+?)\\s*(?=exclusion|inclusion)";
System.out.println(f(input,regex));
System.out.println(f(input1,regex));
System.out.println(f(input2,regex));
}
}
String regex="(?:between|inclusion|exclusion)\\s*(.+?)\\s*(?=exclusion|inclusion)";
between,inclusion,exclusion 与exclusion,inclusion 中间夹杂的字符串加'
应该没啥问题了吧?
String input="between val ue 123 21 1 inclusion exclusion";
String input1="between inclusion va lu asdas e2 inclusion"; //得出的結果為:
between' '' '' ''val' '' 'ue' '123' '21' '1'' '' '' 'inclusion' '' 'exclusion
between 'inclusion va lu asdas e2' inclusion//理想的結果為:
between 'val ue 123 21 1' exclusion '' exclusion
between '' exclusion 'va lu asdas e2' exclusion
package Test;
import java.util.regex.*;
import java.util.*;
public class qdb
{
public static String f(String input,String regex)
{
ArrayList<String> list=new ArrayList<String>();
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(input);
StringBuffer sb=new StringBuffer();
while(m.find())
{
System.out.println(m.group(1)+",");
m.appendReplacement(sb, "'"+m.group()+"'");
}
m.appendTail(sb);
return sb.toString();
}
public static void main(String[] args)
{
String input="between val ue 123 21 1 inclusion exclusion";
String input1="between inclusion va lu asdas e2 inclusion"; String input2=" between dsfsdaf fgdsfgs v alue exclusion va inclusion ";
String regex="(?<=between|inclusion|exclusion)(.+?)\\s(?=exclusion|inclusion)";
System.out.println(f(input,regex));
System.out.println(f(input1,regex));
}
}
闷了半天,楞是没想去怎么把匹配好的完整的放回去,改了这个方法,不过这个很影响效率~
private static final String PATTERN1 = "^between(.+?)(inclusion|exclusion)(.+?)(inclusion|exclusion)$"; private static final String PATTERN2 = "^users program(.+?)with input=(.+?)$"; public static void main(String[] args) {
String input = "between val ue 123 21 1 inclusion exclusion";
String input1 = "between inclusion va lu asdas e2 inclusion";
System.out.println(testPattern1(input));
System.out.println(testPattern1(input1));
String str = "users program value1 with input=value2";
String str1 = "users program val ue 123 21 1 with input= va lu asdas e2 ";
System.out.println(testPattern2(str));
System.out.println(testPattern2(str1));
} /**
* @param str
* String str="between value1 inclusion value2 exclusion"
*/
public static String testPattern1(String str) {
str = str.replaceAll(PATTERN1, "$1 between $2 between $3 between $4");
String[] parts = str.split("\\bbetween\\b");
return "between '" + parts[0].trim() + "' " + parts[1].trim() + " '" + parts[2].trim() + "' " + parts[3].trim();
} /**
* @param str
* String str="users program value1 with input=value2";
*/
public static String testPattern2(String str) {
str = str.replaceAll(PATTERN2, "$1 with $2");
String[] parts = str.split("\\bwith\\b");
return "program '" + parts[0].trim() + "' input='" + parts[1].trim() + "'";
}
}between 'val ue 123 21 1' inclusion '' exclusion
between '' inclusion 'va lu asdas e2' inclusion
program 'value1' input='value2'
program 'val ue 123 21 1' input='va lu asdas e2'
本应是:between 'val ue 123 21 1' exclusion '' exclusion
却变成了:between' val ue 123 21 1 'exclusion' 'exclusion
在value的两边都加多了空格,而between与'号之前却没了空格
rcom10002的方法基本上能够实现,但当有下列情形时会报错
String input = "between val ue 123 21 1 inclusion ";
上面这种情况是不满足条件的,一定要是如下格式才行,否则最好是返回null
String str="between value1 inclusion/exclusion value2 inclusion/exclusion" // 表达式中的/表或,二选一而对于String str="users program value1 with input=value2"
with input=value2这一部分可以省略,即为String str="users program value1"再次感谢各位!