Esing regular expression to reformat text (match & replace)
Hi guys ..I am using regilar expression to reformat logs files..
this is how i match the pattern..
Pattern pattern = Pattern.compile("^<[^>]*>(.{6}).....
Matcher matcher = pattern.matcher(thisLine);
then prints the output...
myOutput.print(matcher.group(1));
It works..however my prob now is, i am reading a date in format "8 Nov"
How can i change this to 8-11-2005 ????
hmmm....ya..i can see the idea
(\\d\\d?) (Jan|Feb|Mar|Apr|May|Ju[nl]|Aug|Sep|Oct|Nov|Dec) means that the month can be either one rite?
but the thing is..its collected and put in a group. for example:
Pattern pattern = Pattern.compile("^<[^>]*>(.{6}) ...
myOutput.print(matcher.group(1));
the first regular expression is group in group(1). its working..it can detect the text in group(1) the problem was...i tried this..
String priority = matcher.group(6);
if (priority=="3")
System.out.print("AAA\n");
else
System.out.print("BBB\n");
it keeps on printing BBB even there is a "priority=3".
Similar Messages
-
Regular expressions, using pattern and matcher but not include the pattern
Hi all
i have a regular expression but in my matcher it is including the text that is in my regular expression.
ie
String str="-------------------stuff===========";
Pattern mainBody = Pattern.compile("-----(.*?)=====", Pattern.MULTILINE);this matches -------------------stuff=====
now i expect to get some - in there as i match from the start, but i dont want to have the = in the match. how do i do a match that excludes the matching expressions.nevermind, figured it out
when i do myMatch.group(1) it gives me just my match
sorry for wasting time :) -
Regular expression vs oracle text performance
Does anyone have experience with comparig performance of regular expression vs oracle text?
We need to implement a text search on a large volume table, 100K-500K rows.
The select stmt will select from a VL, a view joining 2 tables, B and _TL.
We need to search 2 text columns from this _VL view.
Using regex seems less complex, but the deciding factor is of course performace.
Would oracle text search perform better than regular expression in general?
Thanks,
MargaretHi Dominc,
Thanks, we'll try both...
Would you be able to validate our code to create the multi-table index:
CREATE OR REPLACE PACKAGE requirements_util AS
PROCEDURE concat_columns(i_rowid IN ROWID, io_text IN OUT NOCOPY VARCHAR2);
END requirements_util;
CREATE OR REPLACE PACKAGE BODY requirements_util AS
PROCEDURE concat_columns(i_rowid IN ROWID, io_text IN OUT NOCOPY VARCHAR2)
AS
tl_req pjt_requirements_tl%ROWTYPE;
b_req pjt_requirements_b%ROWTYPE;
CURSOR cur_req_name (i_rqmt_id IN pjt_requirements_tl.rqmt_id%TYPE) IS
SELECT rqmt_name FROM pjt_requirements_tl
WHERE rqmt_id = i_rqmt_id;
PROCEDURE add_piece(i_add_str IN VARCHAR2) IS
lx_too_big EXCEPTION;
PRAGMA EXCEPTION_INIT(lx_too_big, -6502);
BEGIN
io_text := io_text||' '||i_add_str;
EXCEPTION WHEN lx_too_big THEN NULL; -- silently don't add the string.
END add_piece;
BEGIN
BEGIN
SELECT * INTO b_req FROM pjt_requirements_b WHERE ROWID = i_rowid;
EXCEPTION
WHEN NO DATA_FOUND THEN
RETURN;
END;
add_piece(b_req.req_code);
FOR tl_req IN cur_req_name(b_req.rqmt_id) LOOP
add_piece(tl_req.rqmt_name);
END concat_columns;
END requirements_util;
EXEC ctx_ddl.drop_section_group('rqmt_sectioner');
EXEC ctx_ddl.drop_preference('rqmt_user_ds');
BEGIN
ctx_ddl.create_preference('rqmt_user_ds', 'USER_DATASTORE');
ctx_ddl.set_attribute('rqmt_user_ds', 'procedure', sys_context('userenv','current_schema')||'.'||'requirements_util.concat_columns');
ctx_ddl.set_attribute('rqmt_user_ds', 'output_type', 'VARCHAR2');
END;
CREATE INDEX rqmt_cidx ON pjt_requirements_b(req_code)
INDEXTYPE IS CTXSYS.CONTEXT
PARAMETERS ('DATASTORE rqmt_user_ds
SYNC (ON COMMIT)'); -
Need a regular expression for the text field
Hi ,
I need a regular expression for a text filed.
if the value is alphanumeric then min 3 char shud be there
and if the value is numeric then no limit of chars in that field.[0-9].
Any help is appriciated...
thanks
bharathi.Try the following in the change event:
r=/^[a-z]{1,3}$|^\d+$/i;
if (!r.test(xfa.event.newText))
xfa.event.change="";
Kyle -
Regular Expressions and Full-text Requests.
Hi,
i have just read that Berkeley DB XML doesnt support regexp in XQuery (what a pity),
do you know how to look-alike regular expressions in Query?
for example, i'd like to perform a full-text request, all tags that contains text like "Be.+ley" (it would return tags that contains text like "Berkeley" or "Beverley"), how can i do that?
Thx.Hi,
A performant way to do something like you want is with a query that mixes use of contains() (index optimized) and matches() (not index optimized). Something like this:
collection()//tag[contains(., "Be") and contains(., "ley") and matches(., "Be.+ley")]John -
[DW CC] Regular Expression and Back Reference in "Replace with": Escape
I have a problem with escaping a character in "Replace with".
Let's assume the following situation:
Content:
foobar
Search for:
(foo)(bar)
Replace by:
$1zot$2
Result:
foozotbar
Everything is fine.
But I want to insert the number "2" in between foo and bar.
When I use
Replace by: $12$2
The result is:
$12$2
It seems that the regex engine interpretes the "$12" as a whole. And because there's no back reference with the count "12" DW cannot work correctly.
The question:
How can I "escape" the "2"?
Thanks.Dreamweaver uses JavaScript for its Find and Replace with regex.
I've just checked the Regular Expressions Cookbook by Jan Goyvaerts and Steven Levithan (O'Reilly). It deals with exactly this sort of situation where capturing groups can be ambiguous. This is what it says:
"Java and JavaScript try to be clever with $10 [and above]. If a capturing group with the two-digit number exists in your regular expresssion, both digits are used for the capturing group. If fewer capturing groups exist, only the first digit is used to reference the group, leaving the second as a literal. Thus $23 is the 23rd capturing group, if it exists. Otherwise, it is the second capturing group followed by a literal 3."
In other words, there is no way to escape the 2 in the Replace field. It would appear there's a bug in Dreamweaver's use of capturing groups. -
Regular expression to select non-matching pattern
Hi All,
I am having question on regular expressions
I want to select lines containing non-matching pattern.
For example if we consider following cities:
London
NewYork
Delhi
Mountainview
If above are the given then how to select all cities except "Delhi"
Please suggest. Thanks.Hi,
You need to explain what actually you need to get out. As all these cities are in expression [a-z, A-Z]. Some more input required.
Kuldeep Jangra -
Regular expressions for URLs to match extensions
I am working on a simple method that will assign a specific extension
(e.g. ".jsp", ".php", ".cfm", etc.) to the end of a URL if it doesn't
find anything marking a valid extension, however, I do not want to add
an extension if one is found.
Consider my code:
import java.util.regex.Pattern;
public static final String urlEndSlashPattern = "/?";
public static final String urlQSPattern = "\\??([a-zA-Z0-9\\-_\\.]
+=[^&]*&?)*";
public static final String urlAnchorPattern = "#[^#]*$";
public static void addExtToUrl(String url, String myExt, String[]
exts) {
StringBuffer sb = new StringBuffer();
boolean hasExt = false;
for (int i = 0; i < exts.length; i++) {
sb.append(".").append(exts).append(urlEndSlashPattern).append(urlQSPatte�rn).append(urlAnchorPattern);
if (Pattern.matches(sb.toString(), url)) {
hasExt = true;
sb = new StringBuffer();
if (!hasExt) {
url += "." + myExt;
The issue I want to bring up is the regular expression pattern I'm
using appears to fail. I want to check and see if the URL I provide
ends with a valid extension, followed by optional "/" or a query
string or an anchor or any combination of these.
Like say if I have
http://www.blah.com/index.html
Then don't add the ".jsp" extension
But if I have
http://www.blah.com/registration/
Then I *want* to add the ".jsp" extension:
http://www.blah.com/registration.jsp
Or if I have:
http://www.blah.com/registration/?foo=bar#baz
Then it needs to change to
http://www.blah.com/registration.jsp?foo=bar#baz
But if I have
http://www.blah.com/registration/index.php?foo=bar#baz
Then I do *not* add the ".jsp" extension.
Hope that makes sense now. Bottom line is that the pattern above
doesn't seem to work. Ideas?
ThanksOk, just for fun, let's try it.
URL: http://www.blah.com/?bar=baz#anchor
Absolutely valid URL and something possible (remember, Balus, this is from a database entry, thus, it can be anything at all!)
Let's split onto the last /
Your last entry will be
?bar=baz#anchor
So if I re-insert the .jsp that it would not find I get
http://www.blah.com/.jsp?bar=baz#anchor
INVALID URL
Now let's try this one, BalusC:
http://www.blah.com/index.jsp?forwardURL=http://www.wee.com/gotcha_balus/
Now we split according to the ... last /
http://www.blah.com/index.jsp?forwardURL=http://www.wee.com/gotcha_balus.jsp
Valid URL, but possibly wrong when the query string value for "forwardURL" is read, thus, making the URL ultimately wrong.
Two examples that show that splitting by the last / can't work here. -
Email Regular Expression with a String.Match()
I'm currently using a RichTextEditor for a user to build HTML
for a site. However, I want the application to scan for emails and
encode them so they are protected from spam bots when they go to
the live site. I've written a regular expression to find an email
and it seems to work, but it only returns one email at a time from
the string. I have had to revert to a while loop to traverse the
string until I'm satisfied. I don't particularly like that method
and would like to just do one String.match() query to retrieve all
of the emails. Can anyone see something here that I'm missing?Try adding the global flag (g):
var emailPattern:RegExp =
/[a-z][\w.-]+@\w[\w.-]+\.[\w.-]*[a-z][a-z]+/g;
TS -
Regular expression containing - don't match
Dears,
I have some folders & files created with timestamp in their names.
Example:
2005-07-25-16-13-22-hello
2005-07-15-16-13-20-name.txt
What I want is to make a filter so that when I call File.listFile( filter ), I get the folder matching some criterion, matching prefix, as suffix, or anywere.
I want to get folders with specific dates like i.e. starts with 2005-07-25 as example and ignore the other, so I match between the name of the folder & accepted format
I know I can use startWith, endsWith, indexOf , but I want to use regular expression
In my filter I use the following expression but didn't work:
regExp = "(2005-07-25){1,}." for matching as prefix
regExp = ".(2005-07-25){1,}" for matching as suffix
regExp = ".(2005-07-25){1,}." for matching anywhere
and I use:
boolean isMatch = fileName.matches( regExp );but it never return true for valid folder or file names.
I think the problem is that the timestamp I use contains - which is internally used by regular expression and I think causing this problem, can anyone suggest a solution?
Thanks in advance.I got the * part
regExp = "(2005-07-25){1,}*"for matching as prefix
regExp = "*(2005-07-25){1,}"for matching as suffix
regExp = "*(2005-07-25){1,}*"for matching anywhere
I didn't get the () part, I just use the () for grouping that I want to match this date at least once using {1,} what I need is to match exactly "2005-07-25" which seems not working so far.
plz clarify what u mean
Thanks, best regards -
How to use regular expression using pattern and match concept for this scenario?
Hi Guys,
I have a string "We have 7 tutorials for Java, 2 tutorials for Javascript and 1 tutorial for Oracle"
I need to replace the numbers based on the below condition.
if more then 5, replace with many
if less then 5, replace with a few
if it is 1, replace with "only one"
below is my code, I am missing the equating part to replace the numbers could any one of you please help me out fixing this.
private static String REGEX="(\\d+)";
private static String INPUT="We have 7 tutorials for Java, 2 tutorials for Javascript and 1 tutorial for Oracle";
//String pattern= "(.*)(\\d+)(.*)";
private static String REPLACE = "replace with many";
public static void main(String[] args) {
// Create a Pattern object
Pattern r = Pattern.compile(REGEX);
// Now create matcher object.
Matcher m = r.matcher(INPUT);
//replace the value 7 by the replace string
//How to equate the (\\d+) greater than a number and use it the below code.
INPUT = m.replaceAll(REPLACE);
//Print the final Result;
System.out.println(INPUT);
Thanks and Regards,Hi,
Try the following which makes use of "appendReplacement" instead with the "start" and "end" methods to locate and check the searched "regExp" string before dynamically setting the "replace" string:
String regExp = "\\d+";
String input = "We have 7 tutorials for Java, 2 tutorials for Javascript and 1 tutorial for Oracle";
String replace;
Pattern p = Pattern.compile(regExp);
// get a matcher object
Matcher m = p.matcher(input);
StringBuffer sb = new StringBuffer();
while (m.find()) {
Integer x = Integer.valueOf(input.substring(m.start(), m.end()));
replace = (x >= 5) ? "many" : (x == 1) ? "only one" : "few";
m.appendReplacement(sb, replace);
m.appendTail(sb);
System.out.println(sb.toString());
HTH.
Regards,
Rajen
P.S: Please mark the post as answered/helpful if it resolves your issue for the benefit of all community members. -
Matching Quotes With Regular Expressions
Hi, I have been attempting to develop an app which extract texts from pdfs then applies regular expression to the text. In one instance I attempt to match a curly open quote symbol which matches the . construct as well as the \W. However, it does not match \p{Punct} or \p{P} - does anyone know why this might be?
I have read that a pattern \p{Pi} exists for matching opening brackets but am told when I run Java that no such characters class exists - is there anywhere where I can get info on all of the character classes available (not the Pattern javadoc)?
Thanks very much,
Ross. construct match anything and \W matches any non alphanumaric
to match a curly bracket use \{
Basicaly ( { [ has special meanings in regex so when you match them you have to use \{, \(, \[ in java strings it means \\{, \\(, \\[ -
Matches from regular expression into collection
Hello,
I need to do the following:
I have a long string with some similar repeated data. I would like, using a regular expression, to extracts all matches in a collection. Is there a way of performing this task?
I have look through the owa_pattern package, but as far as I found out, I can extract only a simple match. Here is an exact quote:
"If multiple overlapping strings can match the regular expression, this function takes the longest match. " - http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28419/w_patt.htm
So what can I do if I want to get all the matches?
Thank you in anticipation. Any help would be appreciated.
Best regards,
beroetzI think your need a tokenizer-function.
If the string +:in_str+ is delimited by +:in_delimiter+ you could try this:
SELECT REGEXP_REPLACE(REGEXP_SUBSTR( :in_str || :in_delimiter, '(.*?)' || :in_delimiter, 1, LEVEL ), :in_delimiter, '') TOKEN
BULK COLLECT INTO :my_nested_table
FROM DUAL
CONNECT BY REGEXP_INSTR( :in_str || :in_delimiter, '(.*?)' || :in_delimiter, 1, LEVEL ) > 0
ORDER BY LEVEL ASC;
I wrote a string-to-textarray-tokenizer (and it's pendant) some times ago, being able to cut from certain positions within the string using regular expressions and return the elements into an nested table of varchar2. It looks like:
TYPE pos_arraytype IS TABLE OF POSITIVE ;
TYPE text_arraytype IS TABLE OF VARCHAR2(2000);
FUNCTION stringToTextarray(in_str IN VARCHAR2, in_pos_arr IN pos_arraytype, in_regexp_arr IN text_arraytype DEFAULT NULL, in_trim_strings IN BOOLEAN DEFAULT TRUE)
RETURN text_arraytype ;
in_str is the string to be tokenized
in_pos_arr is a table of positive values of positions in the string to be cut
in_regexp_arr is a table of regular expressions to use at each position declared by in_pos_arr
in_trim_strings is a flag, if the cutted element should be trimmed
using above for example:
in_str = 'Markus van Muster 347651234XY Musterdaam ABCDE'
in_pos_arr = (1, 13, 35, 35, 42)
in_regexp_arr = ('(.?){12}', '([^[:digit:]]?){22}', '[[:digit:]]{4}', '[[:alpha:]]{2}', '(.?){14}')
in_trim_strings = TRUE
RETURN collection ('Markus','van Muster','1234','XY','Musterdaam')
If you need the code, then tell me! I'm looking for....
Cheers,
Martin
Edited by: Nuerni on 17.10.2008 08:49 -
Regular Expression for Match Pattern (string) Function
I need to find a variable length string enclosed by brackets and
within a string. Can't seem to get the regular expression right for
the Match Pattern function. I'm able to get the job done using the
Token function, but it's not as slick or tight as I'd like. Does
anybody out there have the expression for this?Jean-Pierre Drolet wrote in message news:<[email protected]>...
> The regular expression is "\[[~\]]*\]" which means:
> look for a bracket "\[" (\ is the escape char)
> followed by a string not containing a closing bracket "[~\]]*"
> followed by a closing bracket "\]". The match string include the
> brackets
>
> You can also read "Scan from String" with the following format:
> "%[^\[]\[%[^\[\]]" and read the 2nd output. The brackets are removed
> from the scanned string.
Thanks, Jean_Pierre
I did some more experimenting after posting and found that \[.*\] also
works with the match pattern function. Thanks for your input.
sm -
Looping through files with Regular expressions ?
Hi,
My Question is:
if i have the following Regular Expression,
String regrex = "tree\\s\\w{1,4}.+\\s=\\s(.*;)";
The file in which i am looking for the string has multiple entries, is it
possible to do another regular expression on the captured group (.*;)
which is in the original Regular expression ?
The text that is captured by the RE is of the type "(1,(2,((3,5),4)));" for
each entry, and different entries in the file have slightly different syntax
is it possible to loop through the file and first of all check for the presence
of the original RE in each entry of the file
and then secondly, check for the presence of another RE on the captured group?
[ e.g. to check for something like, if the captured group has a 1 followed by a 3
followed by a 5 followed by a and so on ].
Thanks Very much for any help, i've been struggling with this for a while!!
Much appreciated
The code that i have so far is as follows:
import java.util.*;
import java.util.regex.*;
import java.io.*;
import java.lang.*;
import javax.swing.*;
public class ExpressReg {
public String Edit;
public ExpressReg(String editorEx){
Edit = editorEx; // Edit = JTextArea
String regrex = "tree\\s\\w{1,4}.+\\s=\\s(.*;)";
//String regrex1 = "(.*;)";
Pattern p = Pattern.compile(regrex);
Matcher m = p.matcher(editorEx); // matcher can have more than one argument!
boolean result = m.find();
if(result){
JOptionPane.showMessageDialog(null, "String Present in Editor");
else if(!result){
JOptionPane.showMessageDialog(null, "String Not Present In Editor");if i have the following Regular Expression,
String regrex = "tree\\s\\w{1,4}.+\\s=\\s(.*;)";
The file in which i am looking for the string has multiple entries, is it
possible to do another regular expression on the captured group (.*;)
which is in the original Regular expression ?Yes, the capturing group is $1 (the only one) referenced in source code as m.group(1).
m.group() will return entire matching.
simply use this way:
String result = m.group(1);
// your stuff: could be another validation
The text that is captured by the RE is of the type "(1,(2,((3,5),4)));" for
each entry, and different entries in the file have slightly different syntax
is it possible to loop through the file and first of all check for the presence
of the original RE in each entry of the file
and then secondly, check for the presence of another RE on the captured group?Again "Yes", no limits!
Don't need to create another Matcher, just use m.reset(anotherSourceString)..loop using the same pattern.
Note: Take care with ".*" because regex nature is "greedy", be more specific, eg.: "\\d" just matches digits (0-9).
Can you give us some sample of "slight difference" ?
Maybe you are looking for
-
Hi, system i am using for Oracle SOA is : Windows 64 Bit i5 Processor 6 GB RAM 29 GB on C Drive is already free after installation of all SOA related products. I have installed wlserver_10.3 for SOA 11g Development purpose and followed exact installa
-
Pop up saying File already exists when saving an excel file while running exe
I have an excel file which I read and write in my application. When I run the application in development system, it works fine. However when I run the application as an exe and try to save the excel file, it says that 'The file already exists and Do
-
FTP to FTP scenario. Pls advice urgent
Hi, I have FTP to FTP scenario. Do I need to install FTP server on both Sender and Receiver File Systems Regards
-
How do I set tabs in textFrames with tabStops?
Could anyone show me the javascript syntax, or point me to a script, that sets tabStops and positions them. I can't get it working. Please ask if any further clarification or explanation would be usefull.
-
ENHANCEMENT-POINT in reprot RM06EPS0
HI ALL, I want to change report 'RM06EPS0' that is price comparson list, i think of copying this into a z report and then make changes. But when i open the source code it contains statements like this. [code]ENHANCEMENT-POINT RM06EPS0_G4 SPOTS ES_RM0