求正则表示式

demo大师粉丝 2010-07-23 08:16:53
一个这样格式的文本:
header:
<[
ddddddddddddddddddddddddddddddd
]>

parameter:
<[
hhhhhhhhhhhhhhhhhhhhhhhhhhhhh
]>




=================================
我想把 <[ 和 ]> 之间的内容读取出来,,,

这个正则表示式,应该怎样写啊?(要考虑有回车符)
...全文
105 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
closewbq 2010-07-24
  • 打赏
  • 举报
回复

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String args[]) {
String[] array = { "<[\nddddddddddddddddddddddddddddddd\n]>",
"<[\nhhhhhhhhhhhhhhhhhhhhhhhhhhhhh\n]>" };
String regex = "\\<\\[([^\\[\\]]*)\\]\\>";
Pattern p = Pattern.compile(regex, Pattern.DOTALL);
Matcher m = null;
for (String str : array) {
m=p.matcher(str);
while (m.find()) {
System.out.println("match=" + m.group(1));
}
}
}
}
快乐的2 2010-07-24
  • 打赏
  • 举报
回复
^(\w+):\<\[(\w+)\]\>$
组1获得是属性名称,组2获得属性值
快乐的2 2010-07-24
  • 打赏
  • 举报
回复
^(\w+):\<\[(\w+)\]\>$
demo大师粉丝 2010-07-24
  • 打赏
  • 举报
回复
还是不行,这次我将代码、读取的文件都贴出来,请高手帮忙下

java类:
----------------------------------------------------------
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

public static void main(String[] args) throws Exception {

BufferedReader br = new BufferedReader(new FileReader(
"e:\\in.txt"));

BufferedWriter bw = new BufferedWriter(new FileWriter("e:\\out.txt"));

String temp = "";
StringBuffer sb = new StringBuffer();

while ((temp = br.readLine()) != null) {
sb.append(temp + "\r");
}

Pattern p = Pattern.compile("<\\[.*?\\]>");
Matcher m = p.matcher(sb.toString());
while (m.find()) {
System.out.println("---> " + m.group());
bw.write(m.group().toString());
bw.newLine();
}

bw.flush();
br.close();
bw.close();
}
}


in.txt 文件
--------------------------------------
cookie:
<[
<bean:cookie id="cookie" name="/tags/cookiedemo" value="firsttime"/>
<%
if (cookie.getValue().equals("firsttime")) {
Cookie c = new Cookie("/tags/cookiedemo", "Hi Linda!");
c.setComment("A test cookie");
c.setMaxAge(3600); //60 seconds times 60 minutes
response.addCookie(c);
}
%>
The cookie value is: <bean:write name="cookie" property="value"/>
]>

header:
<[
<logic:present header="User-Agent">
<!-- 其它标签通过绑定到page作用域中的属性使用该值 -->
您的浏览器是<bean:header id="userAgent" name="User-Agent"/>
<bean:write name="userAgent"/>。<br/>
<!-- JSP脚本通过scripting变量使用该值 -->
<%
out.println("您的浏览器是"+userAgent+"。<br/>");
%>
</logic:present>
]>


parameter:
<[
<bean:parameter id="p" name="param"/>
<bean:write name="p"/>

<bean:parameter id="ps" multiple="true" name="param"/>
<logic:iterate id="p" name="ps">
<bean:write name="p"/><br/>
</logic:iterate>
]>


===============================
我想要的是截取位于"<[" 和 "]>" 之间的内容,,也就是,例如:第一个取得的是
<bean:cookie id="cookie" name="/tags/cookiedemo" value="firsttime"/>
<%
if (cookie.getValue().equals("firsttime")) {
Cookie c = new Cookie("/tags/cookiedemo", "Hi Linda!");
c.setComment("A test cookie");
c.setMaxAge(3600); //60 seconds times 60 minutes
response.addCookie(c);
}
%>
The cookie value is: <bean:write name="cookie" property="value"/>

这里是需要保持格式(也就是保持缩进)。。

coooliang 2010-07-24
  • 打赏
  • 举报
回复
同鞋 你这个要用正则也可以解决吧!还有这应该算是J2SE的问题不是WEB

import java.util.regex.*;
import java.io.*;
public class Test2
{
public static void main(String[] args)
{
BufferedReader br = null;
boolean start = false;
try{
br = new BufferedReader(new FileReader("in.txt"));
String s = "";
while((s = br.readLine().trim())!=null){
if(s.equals("<[")){//s.startsWith("<[")&&s.endsWith("]>")
start = true;
}else if(s.equals("]>")){
start = false;
}else if(start){
System.out.println(s);
}
}
br.close();
}catch(Exception e){/*...*/}
}
}

demo大师粉丝 2010-07-24
  • 打赏
  • 举报
回复
高手还没起床,,自己顶一下,,
demo大师粉丝 2010-07-24
  • 打赏
  • 举报
回复
可以了,,谢谢大家,,,惨了,,分数不够分,,下次,,给多些分才好,,
谢谢,,,
demo大师粉丝 2010-07-24
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 wang8118 的回复:]

Java code
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
impo……
[/Quote]
这个代码的sb.append(s);没有加上换行符啊,所以我不能保持原来文件的格式,,我想通过正则表达式读取后,还是原来的格式,,
梅小西Echo 2010-07-24
  • 打赏
  • 举报
回复
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class w {

/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
File f = new File("h:\\M.txt");
StringBuffer sb = new StringBuffer();
BufferedReader br = null;
String s;
try {
br = new BufferedReader(new InputStreamReader(new FileInputStream(f)));
} catch (FileNotFoundException e) {
e.printStackTrace();
}

while((s = br.readLine())!=null)
{
sb.append(s);
}

Pattern p = Pattern.compile("<\\[(.*?)\\]>");
Matcher m = p.matcher(sb.toString());

while(m.find())
{
System.out.println(m.group(1));
}

}

}
coooliang 2010-07-24
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 cl61917380 的回复:]
同鞋 你这个要用正则也可以解决吧!还有这应该算是J2SE的问题不是WEB

Java code

import java.util.regex.*;
import java.io.*;
public class Test2
{
public static void main(String[] args)
{
BufferedReader br ……
[/Quote]
少打一个 不 字
wqkjj 2010-07-23
  • 打赏
  • 举报
回复
如果要去掉回车换行空白,只需要中间部分的内容,把正则表达式替换一下
String regex = "\\<\\[\\s*([^\\]\\>]*)\\s*\\]\\>";
wqkjj 2010-07-23
  • 打赏
  • 举报
回复
不好意思,前面发了个JS版,没看是 Java版

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test{
public static void main(String[] args){
dealStr("<[ddddddddddddddddddddddddddddddd]>");
}
public static void dealStr(String content){
String regex = "\\<\\[([^\\]\\>]*)\\]\\>";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(content);
while(matcher.find()){
System.out.println("match="+matcher.group(1));
}
}
}
coooliang 2010-07-23
  • 打赏
  • 举报
回复

import java.util.regex.*;
public class CsdnHmilyl
{
public static void main(String[] args)
{
String s = "123abc<[ddddddddddddddddddddddddddddddd]>abc123";
Pattern p = Pattern.compile("<.(\\w+).>");
Matcher m = p.matcher(s);
while(m.find()){
System.out.println(m.group(1));
}
}
}

wqkjj 2010-07-23
  • 打赏
  • 举报
回复
var s="<[ddddddddddddddddddddddddddddddd]>";
var reg=/\<\[([^\]\>]*)\]\>/g;
alert( reg.exec(s)[1] );
carrey360 2010-07-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 findhappy7 的回复:]
代码段如下:
其中 jstl_core.info 这个文件的内容格式就是上面所述的格式


public static void main(String[] args) throws Exception {

BufferedReader br = new BufferedReader(new FileReader(
"e:\\jstl_core.info"));

Buffer……
[/Quote]

不懂
demo大师粉丝 2010-07-23
  • 打赏
  • 举报
回复
一个这样格式的文本:
header:
<[
ddddddddddddddddddddddddddddddd
]>

parameter:
<[
hhhhhhhhhhhhhhhhhhhhhhhhhhhhh
]>




=================================
我想把 "<[" 和 "]>" 之间的内容读取出来,,也就是读取ddddddddddddddddddddddddddddddd
和hhhhhhhhhhhhhhhhhhhhhhhhhhhhh
demo大师粉丝 2010-07-23
  • 打赏
  • 举报
回复
代码段如下:
其中 jstl_core.info 这个文件的内容格式就是上面所述的格式


public static void main(String[] args) throws Exception {

BufferedReader br = new BufferedReader(new FileReader(
"e:\\jstl_core.info"));

BufferedWriter bw = new BufferedWriter(new FileWriter("e:\\out_tag_info.txt"));

String temp = "";
StringBuffer sb = new StringBuffer();

while ((temp = br.readLine()) != null) {
//System.out.println("每一个:" + temp);
sb.append(temp + "\r");
}

//System.out.println("全部读书来的效果:" + sb.toString());

//Pattern p = Pattern.compile("<\\[.*?\\]>");
Pattern p = Pattern.compile("<\\[.*?|\r|.*?\\]>");
//Pattern p = Pattern.compile("[\\d\\D]*");
//Matcher m = p.matcher(" <[1sdfsdafad sd;l0934rn43po ,34o5 klsfsaf]> <[2 ]><[3]> <[4]> ");
Matcher m = p.matcher(sb.toString());
while (m.find()) {
System.out.println("---> " + m.group());
bw.write(m.group().toString());
bw.newLine();
}

bw.flush();
br.close();
bw.close();
}
wangyuzx1985 2010-07-23
  • 打赏
  • 举报
回复
没看懂你意思

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧