Regular Expression and PL/SQL help
I am using Oracle 9i, does 9i support regular expression? What functions are there?
My problem is the birth_date column in my database comes from teleform ( a scan program that reads what people wrote on paper), so the format is all jacked up.... 50% of them are 01/01/1981, 10% are 5/14/1995, 10% are 12/5/1993, 10% are 1/1/1983, 10% are 24-JUL-98. I have never really used regular expression and pl/sql, can anybody help me convert all of them to 01/01/1998?
Does Oralce 9i support regular expression? What can I do if oralce 9i does not support regular expression? Thank you very much in advance.
9i doesn't support regular expressions (at least not in the 10g regular expressions sense. There is an OWA_PATTERN_MATCH package that has some facilities for regular expressions). But it doesn't look like this is a regular expressions problem.
Instead, this is probably a case where you need to
- enumerate the format masks you want to try
- determine the order you want to try them
- write a small function that tries each format mask in succession until one matches.
Of course, there is no guarantee that you'll ever be able to convert the data to the date that the user intended because some values will be ambiguous. For example, 01/02/03 could mean Feb 1, 2003 or Jan 2, 2003 or Feb 3, 2001 depending on the person who entered the data.
Assuming you can define the order, your function would just try each format mask in turn until one generated a valid date, i.e.
BEGIN
BEGIN
l_date := TO_DATE( p_string_value, format_mask_1 );
RETURN l_date;
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
BEGIN
l_date := TO_DATE( p_string_value, format_mask_2 );
RETURN l_date;
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
BEGIN
l_date := TO_DATE( p_string_value, format_mask_3 );
RETURN l_date;
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
BEGIN
l_date := TO_DATE( p_string_value, format_mask_N );
RETURN l_date;
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
RETURN NULL;
END;Justin
Similar Messages
-
Regular Expression and XML character help
Hi All,
I am working on a system that needs to convert some input from web browser into XML format and transform the data to some other format using XSLT. While doing this, I encounter some special characters that cannot be used in XML. To resolve this, I wrote a class using java.util.regex.Pattern to filter the input. Most of the special characters we successfully filtered except the following characters (as found so far):
Θ θ (theta), Π(pi) and � (prime)
Does anybody knows how to filter them?
Thanks!!!UTF-8 will work fine for encoding XML. Of course you actually have to use UTF-8 to encode the data. Just saying you did in the prolog doesn't work, if you actually used some other encoding.
-
I have working regular expressions and a working sql connection, but I don�t know how to stop the info from getting into the database when input doesent match the regular expression.
For instans, you put in an e-mail without an "@" and my program writes and error message. But the info still gets in to the database.
Any help would be much apreciated as I dont know where to start. If you have links or code examples that would be great to.
Thanx.Well, the obvious answer is "only write the data to the database if the input doesn't match the regular expression."
Presumably you're really asking how to do that - but it depends upon how your application is structured in the first place, and you haven't told us anything at all about that. -
Can somebody help me in getting some good material for Regular Expressions and IP Community list
can somebody help me in getting some good material for Regular Expressions and IP Community list
I'm not sure what you mean by "IP Community list", but here are 3 reference sites for Regular Expressions:
Regular Expression Tutorial - Learn How to Use Regular Expressions
http://www.regular-expressions.info/tutorial.html
Regular Expressions Cheat Sheet by DaveChild
http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/
Regular Expressions Quick Reference
http://www.autohotkey.com/docs/misc/RegEx-QuickRef.htm -
Regular expressions and backreference
Hello!
I am trying to use backreferences in REGEXP in the PERL-style, where I want to match my regular expression and later refer to the grouped values. I can read that those are referecenced with \1 .. \9, but I simply cant get it to work. Here is an example in PL/SQL:
SELECT REGEXP_SUBSTR(l_users.adresse,'([A-Z]+)\s+(\d+)')
INTO l_dummy_varchar2
FROM dual;
OR I could do things like:
l_dummy_varchar2 := REGEXP_SUBSTR(l_users.adresse,'([A-Z]+)\s+(\d+)');
It seems to work, but I cant figure out how to get the backreferenced value.
I would love to do things like:
dbms_output.put_line('my value ='||\1)
but this doesnt work.
Help is very much appreciated.
Best regards
DannieLikewise you can extract things using the
REGEXP_SUBSTR, but you don't need back
referencing...backreferencing is better than additional function (ltrim) use, and BTW be careful with this "ltrims":
SQL> set serveroutput on
SQL>
SQL> DECLARE
2 v_txt VARCHAR2(100);
3 BEGIN
4 v_txt := ltrim(regexp_substr('HERE IS AN ASCII CHARACTER', 'IS AN [[:alnum:]]*'),'IS AN ');
5 DBMS_OUTPUT.PUT_LINE('Word after IS AN: '||v_txt);
6 END;
7 /
Word after IS AN: CII
PL/SQL procedure successfully completed
SQL>
SQL> DECLARE
2 v_txt VARCHAR2(100);
3 BEGIN
4 v_txt := regexp_replace('HERE IS AN ASCII CHARACTER', 'IS AN ([[:alnum:]]*)|.','\1');
5 DBMS_OUTPUT.PUT_LINE('Word after IS AN: '||v_txt);
6 END;
7 /
Word after IS AN: ASCII
PL/SQL procedure successfully completed
SQL> -----------
VB
http://volder-notes.blogspot.com/ -
SQL, PL/SQL Expression and PL/SQL function
In a Post Calculation Computation field I wanted the following computation:
if B is X
then
field = A
else
field = B
end if;
or as a decode
Decode(B,X,A,B)
I could not get this to work so I wrote a database function that simulates the decode. So when I put:
My_decode(B,X,A,B)
in the field it did work.
Basically I am not sure what kind of code one is expected to put into SQL, PL/SQL Expression and PL/SQL function fields. Can someone give an example of each? Also the APEX help is sometimes incorrect.
For example if you click the "Post Calculation Computation" label it says:
The For example, if this item is named P1_X, you could use post calculation expressions such as UPPER(:P1_X), INITCAP(:P2_Y), MIN(:P1_X,:P2_Y-200), NVL(:P1_X,:P2_Y), or a function call such as return my_func(:P1_X); to set the final value of the item.
But if you put return my_func(:P1_X); in the field you get an error. It should be just my_func(:P1_X);
thanks ReneDECODE is only available in SQL, so would have to be used in a SQL Expression.Yes, that's what APEX keeps telling me when I use in in a field that has "SQL or PL/SQL expression" above it. So what do you put in the field?
-
Juniper MX Regular expressions and user permissions ACS 5.4
Hi everyone!
Im having some trouble with regular expressions and permissions on our Juniper MX routers through ACS 5.4, and i would like some insight/help/poitners!!
We have a team of engineers that should only have read only permissions (important: show configuration) and also be able to just change the description on interfaces.
Thus far with the following regular expressions set for the shell profile they are going through i have managed the above, however the problem is when an engineer inputs "Show configuration", only the interfaces descriptions configuration is shown! The rest of the configuration will not be printed.
deny-commands1=.*.
allow-commands1=configure
deny-configuration1=.*.
allow-commands2=interfaces .*. description .*$
allow-configuration1=interfaces .*. description .*$
allow-commands2=show configuration.*
allow-commands3=show configuration
(some of these regex i know that are not needed, i was just playing around to check everything before posting)
Any pointers as to why or how to resolve this?
example output with the above:
show configuration
## Last commit: 2014-01-09 09:34:44 EET by someone
interfaces {
xe-0/0/0 {
xe-0/0/1 {
description xxxx;
xe-0/1/0 {
description xxxx;
xe-0/1/1 {
description xxxx;
xe-0/2/0 {
disable;
xe-0/2/1 {
description xxxx;
xe-0/3/0 {
description xxxx;
xe-0/3/1 {
description xxxx;
ae0 {
description "xxxx";
ae1 {
description xxxx;
demux0 {
lo0 {
{master}
Thanks in advance!
SpyrosYou are absolutely right!! I was doing research online after posting the above. The correct RADIUS attribute to use is actually CVPN3000/ASA/PIX7.x-Group-Based-Address-Pools. Then create the pool in ASA, and call that pool's name in ACS under that RADIUS attribute. Someone explained this perfectly in this community before. Much appreciate your answer!
Here's from another post last year:
ACS 5 does not have the feature of IP pools. Logically its always good to setup pools locally on vpn server and if you want user to pick ip from specific local pool you can configure acs to push that attribute.
On ACS Go to > Policy Elements -> Network Access -> Authorization Profiles -> Create ->
Name of the Policy ->Dictionary Type: Radius-Cisco VPN 3000/ASA/PIX7.x
Attribute Type : CVPN3000/ASA/PIX7.x-Group-Based-Address-Pools
Attribute Type: String
Attribute Value : Static MYPOOL (Name of the Pool which is defined on the ASA)
Access Policies ->Default Network Access -> Authorization -> Create -> Under result section call the Authorization p -
Hello,
I have an XML file containing regular expressions and i parse the file, extract the pattern from it and search for it using java regex package. The problem is it works fine when patterns are words but when the pattern is something like
write \\d+ (write followed by a space followed by one or mre digits) it doesn't work.
I wrote the same code but with the pattern embedded in it,ie. without using XML and it worked. But when extracting with XML it fails.
Also if the pattern is write[0-9] it only extracts write[0-9 and gives an error of no closing bracket.
Could anyone please tell me what i am missing out
Thank youthank you for your replies. Well i have still no got over the problem so i am posting my code here and hoping it can get solved
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import java.io.*;
import java.util.regex.*;
class textextractor extends DefaultHandler{
boolean regex=false;
public void startElement(String namespaceURI,String localName,String qn,Attributes attr)
if(localName.equals("REGEX"))
regex=true;
public void characters(char [] text,int start,int length)throws SAXException {
String t=new String(text,start,length);
boolean flag=false;
if(regex==true)
Pattern pattern;
String w=new String(t);
pattern = Pattern.compile(w);
Matcher matcher;
matcher=pattern.matcher("there is a bat read write 13 error at line ");
while(matcher.find())
flag=true;
System.out.println("I found the text \"" + matcher.group() +"\" starting at index "
+ matcher.start() +"and ending at index " + matcher.end() + ".");
if(!flag)
System.out.println("not found");
regex=false;
public class saxt2 {
public static void main(String args[]) {
try {
XMLReader parser= XMLReaderFactory.createXMLReader();
ContentHandler handler=new textextractor();
parser.setContentHandler(handler);
parser.parse("d:\\regex.xml");
}catch (Exception e) {
System.err.println(e);
}The xml file is
<RegularExpression>
<REGEX>write</REGEX>
<REGEX>write \\d+</REGEX>
<REGEX>read[0-9]</REGEX>
</RegularExpression>by running the code you can see that write is found,write \\d+ doesn't match write 13 in the string and read[0-9] gives and error.
Any help will be greatly appreciated -
"Match Regular Expression" and "Match Pattern" vi's behave differently
Hi,
I have a simple string matching need and by experimenting found that the "Match Regular Expression" and "Match Pattern" vi's behave somewhat differently. I'd assume that the regular expression inputs on both would behave the same. A difference I've discovered is that the "|" character (the "vertical bar" character, commonly used as an "or" operator) is recognized as such in the Match Regular Expression vi, but not in the Match Pattern vi (where it is taken literally). Furthermore, I cannot find any documentation in Help (on-line or in LabVIEW) about the "|" character usage in regular expressions. Is this documented anywhere?
For example, suppose I want to match any of the following 4 words: "The" or "quick" or "brown" or "fox". The regular expression "The|quick|brown|fox" (without the quotes) works for the Match Regular Expression vi but not the Match Pattern vi. Below is a picture of the block diagram and the front panel results:
The Help says that the Match Regular Expression vi performs somewhat slower than the Match Pattern vi, so I started with the latter. But since it doesn't work for me, I'll use the former. But does anyone have any idea of the speed difference? I'd assume it is negligible in such a simple example.
Thanks!
Solved!
Go to Solution.Yep-
You hit a point that's frustrated me a time or two as well (and incidentally, caused some hair-pulling that I can ill afford)
The hint is in the help file:
for Match regular expression "The Match Regular Expression function gives you more options for matching
strings but performs more slowly than the Match Pattern function....Use regular
expressions in this function to refine searches....
Characters to Find
Regular Expression
VOLTS
VOLTS
A plus sign or a minus sign
[+-]
A sequence of one or more digits
[0-9]+
Zero or more spaces
\s* or * (that is, a space followed by an asterisk)
One or more spaces, tabs, new lines, or carriage returns
[\t \r \n \s]+
One or more characters other than digits
[^0-9]+
The word Level only if it
appears at the beginning of the string
^Level
The word Volts only if it
appears at the end of the string
Volts$
The longest string within parentheses
The first string within parentheses but not containing any
parentheses within it
\([^()]*\)
A left bracket
A right bracket
cat, cag, cot, cog, dat, dag, dot, and dag
[cd][ao][tg]
cat or dog
cat|dog
dog, cat
dog, cat cat dog,cat
cat cat dog, and so on
((cat )*dog)
One or more of the letter a
followed by a space and the same number of the letter a, that is, a a, aa aa, aaa aaa, and so
on
(a+) \1
For Match Pattern "This function is similar to the Search and Replace
Pattern VI. The Match Pattern function gives you fewer options for matching
strings but performs more quickly than the Match Regular Expression
function. For example, the Match Pattern function does not support the
parenthesis or vertical bar (|) characters.
Characters to Find
Regular Expression
VOLTS
VOLTS
All uppercase and lowercase versions of volts, that is, VOLTS, Volts, volts, and so on
[Vv][Oo][Ll][Tt][Ss]
A space, a plus sign, or a minus sign
[+-]
A sequence of one or more digits
[0-9]+
Zero or more spaces
\s* or * (that is, a space followed by an asterisk)
One or more spaces, tabs, new lines, or carriage returns
[\t \r \n \s]+
One or more characters other than digits
[~0-9]+
The word Level only if it begins
at the offset position in the string
^Level
The word Volts only if it
appears at the end of the string
Volts$
The longest string within parentheses
The longest string within parentheses but not containing any
parentheses within it
([~()]*)
A left bracket
A right bracket
cat, dog, cot, dot, cog, and so on.
[cd][ao][tg]
Frustrating- but still managable.
Jeff -
Find text using regular expression and add highlight annotation
Hi Friends
Is it possible to find text using regular expression and add highlight annotation using pluginA plugin can use the PDWordFinder to get a list of the words on a page, and their location. That's all that the API offers for searching. Of course, you can use a regular expression library to work with that word list.
-
Regular expression and output format
hi all,
i have following scenario-
regular expression: [0-9]{3}-[0-9]{3}-[0-9]{4}
generated value by the above regular expression: 123-234-6789
output format to display the generated above value: xxx-xxx-$1
now i need to display the generated value (123-234-6789) in the specified output format (xxx-xxx-$1) and the final output will be xxx-xxx-6789
how is it possible?
Note: here regular expression and output format can vary
br,
basharHi, Bashar
You can solve this problem by using the Data Masking Technique.
Masking data means replacing certain fields with a Mask character (such as an X). This effectively disguises the data content while preserving the same formatting on front end screens and reports. For example, a column of credit card numbers might look like:
4346 6454 0020 5379
4493 9238 7315 5787
4297 8296 7496 8724
and after the masking operation the information would appear as:
4346 XXXX XXXX 5379
4493 XXXX XXXX 5787
4297 XXXX XXXX 8724
The masking characters effectively remove much of the sensitive content from the record while still preserving the look and feel. Take care to ensure that enough of the data is masked to preserve security.
It would not be hard to regenerate the original credit card number from a masking operation such as: 4297 8296 7496 87XX since the numbers are generated with a specific and well known checksum algorithm.
Best Regards,
Mahfuz Khan -
Assistance with Regular Expression and Tcl
Assistance with Regular Expression and Tcl
Hello Everyone,
I recently began learning Tcl to develop scripts for automating network switch deployments.
In my script, I want to name the device with a location and the last three octets of the base mac address.
I can get the Base MAC address by :
show version | include Base
Base ethernet MAC Address : 00:00:00:DB:CE:00
And I can get the last three octets of the MAC address using the following regular expression.
([0-9a-f]{2}[:-]){2}([0-9a-f]{2}$)
But I have not been able to figure out how to call the regular expression in the tcl script.
I have checked several resources but have not been able to figure it out. Suggestions?
Ultimately, I want to set the last three octets to a variable (something like below) and then call the variable when I name the switch.
set mac [exec "sh version | i Base"] (include the regular expression)
ios_config "hostname location$mac"
Thanks for any assistance in advance.
ChrisThis worked for me.
Switch_1(tcl)#set result [exec show ver | inc Base]
Base ethernet MAC Address : 00:1B:D4:F8:B1:80
Switch_1(tcl)#regexp {([0-9A-F:]{8}\r)} $result -> mac
1
Switch_1(tcl)#puts $mac
F8:B1:80
Switch_1(tcl)#ios_config "hostname location$mac"
%Warning! Hostname should contain at least one alphabet or '-' or '_' character
locationF8:B1:80(tcl)# -
Help with Regular Expressions and regexp_replace
Oh great Oracle Guru can I can gets some help
I need to clean up the phone numbers that have been entered in Oracle eBusiness per_phones table. Some of the phone numbers have dashes, some have spaces and some have char. I would just like to take all the digits out and then re-format the number.
Ex.
914-123-1234 .. output (914) 123-1234
9141231234 ..again (914) 123-1234
914 123 1234 .. (914) 123-1234
myphone ... just null
(914)-123-1234.. (914) 123-1234
I really tried to understand the regular expressions statments, but for some reason I just can't understand it.Hi,
Welcome to the forum!
I would create a user-defined function for this. I expect there will be a lot of exceptions to the regular rules (for example, strings that do not contain exactly 10 digits, such as '1-800-987-6543') that can be handled, but would require lots of nested fucntions and othwer complicted code if you had to do it in a single statement.
If you really want to do it with a regular expression:
SELECT phone_txt
, REGEXP_REPLACE ( phone_txt
, '^\D*' || -- 0 or more non-digits at the beginning of the string
'(\d\d\d)' || -- \1 = 3 consecutive digits
'\D*' || -- 0 or more non-digits
'(\d\d\d)' || -- \2 = 3 consecutive digits
'\D*' || -- 0 or more non-digits
'(\d\d\d)' || -- \3 = 4 consecutive digits
'\D*$' -- 0 or more non-digits at the end of the string
, '(\1) \2-\3'
) AS new_phone_txt
FROM table_x
; -
Passing regular expression backreference to SQL function
Does anyone know if it is possible to pass a regular expression backreference to an SQL function?
When I try this:
SELECT REGEXP_REPLACE('/abc/23468/xyz1/10/', '(/)([[:digit:]]+)', '\1'||LENGTH('\2')) FROM dual;
I am getting this back:
/abc/2/xyz1/2/
Here LENGTH function takes backreference '\2' literally as a string and does not replace it with the actual value.
Hence, it always returns length of 2 instead of the correct value.
However, if do this
SELECT REGEXP_REPLACE('/abc/23468/xyz1/10/', '(/)([[:digit:]]+)', '\1'||SUBSTR('\2',0)) FROM dual;
I get the right result back
/abc/23468/xyz1/10/
So, SUBSTR works correctly.
Why do LENGTH and SUBSTR handle backreference diffrently?
I am using Oracle 10.2.
Appreciate any help on this.How about this?
CREATE OR REPLACE FUNCTION fmt_string(
p_Source IN VARCHAR2,
P_Delim IN VARCHAR2 DEFAULT '/'
) RETURN VARCHAR2
IS
v_Start PLS_INTEGER;
v_Pos PLS_INTEGER;
v_Len PLS_INTEGER;
v_String VARCHAR2(4000);
v_Result VARCHAR2(4000);
BEGIN
v_Len := LENGTH(p_Source);
v_Start := 1;
WHILE v_Start <= LENGTH(p_Source)
LOOP
v_Pos := INSTR(p_Source, p_Delim, v_Start);
IF v_Pos = 0 THEN
v_Pos := v_Len;
END IF;
v_String := SUBSTR(p_Source, v_Start, v_Pos - v_Start);
IF REGEXP_LIKE(v_String, '^[0-9]+$') THEN
v_String := TO_CHAR(TO_NUMBER(v_String), 'fm0000000000');
END IF;
v_Result := v_Result || v_string || p_Delim;
v_Start := v_Pos + 1;
END LOOP;
RETURN v_Result;
END fmt_string;
/using it this way:
SELECT fmt_string('/abc/23468/xyz1/10/')
FROM dual;You could put that function also into a PACKAGE.
C. -
Java Regular Expressions and Pattern
I have a file that i first want to get all the lines that match a given pattern. Then from these lines that match i want to extract two values.
Example line for the pattern to match
INFO | jvm 1 | 2006/11/07 15:14:09 | INFO | Tue Nov 07 15:14:09 CET 2006 | XLDB PPS Data Dumper: MESSAGE:- 406 Processing .. '[ /opt/nexus/horizon/raw_data/network/pp_CE01S4H_sta_20050703T015717_SYDP3001_546.bdf ]'
So all the lines that are like these i want to extract two variables
2006/11/07 15:14:09
and
/opt/nexus/horizon/raw_data/network/pp_CE01S4H_sta_20050703T015717_SYDP3001_546.bdf
so i can store these variables in a database.
Can someone help me with writing the pattern to match and the regular express to extract? Also if anyone else has a better way of doing this i am all ears and i have a lot of log files to go through.import java.util.regex.*;
class Main
public static void main(String[] args)
String txt="INFO | jvm 1 | 2006/11/07 15:14:09 | INFO | Tue Nov 07 15:14:09 CET 2006 | XLDB PPS Data Dumper: MESSAGE:- 406 Processing .. '[ /opt/nexus/horizon/raw_data/network/pp_CE01S4H_sta_20050703T015717_SYDP3001_546.bdf ]'";
String re1=".*?"; // Non-greedy match on filler
String re2="((?:2|1)\\d{3}(?:-|\\/)(?:(?:0[1-9])|(?:1[0-2]))(?:-|\\/)(?:(?:0[1-9])|(?:[1-2][0-9])|(?:3[0-1]))(?:T|\\s)(?:(?:[0-1][0-9])|(?:2[0-3])):(?:[0-5][0-9]):(?:[0-5][0-9]))"; // Time Stamp 1
String re3=".*?"; // Non-greedy match on filler
String re4="((?:\\/[\\w\\.]+)+)"; // Unix Path 1
Pattern p = Pattern.compile(re1+re2+re3+re4,Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
Matcher m = p.matcher(txt);
if (m.find())
String timestamp1=m.group(1);
String unixpath1=m.group(2);
System.out.print("("+timestamp1.toString()+")"+"("+unixpath1.toString()+")"+"\n");
}
Maybe you are looking for
-
Share the same SharePoint 2013 development environment for multiple developers
Hi, We need our developers(more than 2) to use the same ''SharePoint 2013 development server' for different application developments. Their work should not affect each others(like application pool reset etc.). How this can be achieved ? Thanks,,
-
After latest itunes update i can no longer drag songs using home sharing.
Previously, I was able to open home sharing between my husband (his mac) and my computer (pc). But after the itunes software update on my pc, the ability to import and drag songs is gone. I have done it many times before. I see the home sharing li
-
The latest update for my Mac is taking over an hour
I am updating with the latest update and it looks like it is stuck on the last 90%.
-
Spry Accordion and jQuery UI Accordion for Widget Browser
I have Dreamweaver CS5 and used the spry accordion for a left menu. I then used the widget browser and added jQuery UI accordion. But there appears to be a conflict in that the spry accordion is not displaying the white font on hover, instead using t
-
Mac mini with 50" Pioneer(508xd) grafic problems
Hey, i hope you can help me? I have a mac mini linked up with DVI-HDMI to my pioneer 508xd. And all was fine untill i install the latest update 10.5.7. I think it messed up my graficcard because now the desktop dosn't fit the screen Its to big if i u