BGP AS-PATH REGULAR EXPRESSION ASSISTANCE
Hi all,
I'm trying to create an IOS as-path filter that is asdot+ compatible and that only allows a maximum of 3 as-paths, without taking into considerations any prepends that may appear in the as-path.
The following example illustrates what I'm after (3 x AS-PATH: AS777, AS3.157 and AS75):
777 3.157 3.157 3.157 3.157 3.157 3.157 3.157 3.157 3.157 75
The following as-path filter will work --
ip as-path access-list 200 permit ^(777_)+([0-9]+)|([0-9]+\.[0-9]+)*$
however it will also accept any ASes that are possibly behind AS75, AS76 for example:
777 3.157 3.157 3.157 3.157 3.157 3.157 3.157 3.157 3.157 75 76
What I'm looking for is therefore a way of
1. providing support for asdot+ in an IOS as-path filter
2. allowing a maximum of 3 AS-PATHS into my AS from a NAP
3. Ignore prepends and only count them as a single AS.
In IOS-XR/Juniper terms, I'm trying to replicate the as-path unique-length ge 3 in an IOS as-path.
Doing this in an peer specific inbound route-map is probably easier if your IOS version supports the unique-length option, however this is a valid solution only when you have a few, but not when you have several hundred.
Can anyone think of a way of doing this?
Kind regards,
Andrew
I haven't tested this, but have you tried removing the * at the end an specify 75 instead?
From:
ip as-path access-list 200 permit ^(777_)+([0-9]+)|([0-9]+\.[0-9]+)*$
To:
ip as-path access-list 200 permit ^(777_)+([0-9]+)|([0-9]+\.[0-9]+)_75$
HTH,
John
Similar Messages
-
Using a C350 for Email Encryption Only
I have a regular expression that searches for a number format that could match a medical record number, among other numbers. Getting many false positives due to a matching number being found in many places in the html tags of the email.
Anyone have any good ideas on how to eliminate this? I have quite a few negative lookbehind and negative lookaheads in there already to look for dashes, backslashes, slashes, etc., but still can't weed them all out.
Thanks!Can you paste in some examples of what you're trying to match against?
Using a C350 for Email Encryption Only
I have a regular expression that searches for a number format that could match a medical record number, among other numbers. Getting many false positives due to a matching number being found in many places in the html tags of the email.
Anyone have any good ideas on how to eliminate this? I have quite a few negative lookbehind and negative lookaheads in there already to look for dashes, backslashes, slashes, etc., but still can't weed them all out.
Thanks! -
URL paths and regular expressions in ASDM
Some background info - I've recently switched to an ASA 5510 on 8.4(3) coming from a Checkpoint NGX platform (let's say fairly quickly and without much warning ). I have a couple questions and they're kind of similar so I'll post them up. I've read docs about regex and creating them both via command line and ASDM, but the examples always seem to include info I don't need or honestly something I don't understand yet (mainly related to defining class\inspect maps). If someone could provide a simple example of how to do these in ASDM that would help a lot in understanding how regular expressions are properly configured. So here we go.
I know this is basic but I need to make sure I understand this properly - I have a single web server (so this won't be a global policy) where I need to allow access to a specific URL path\file and that's it. So we'll call it \test\testfile.doc. Any other access to any other path should be dropped. What's the best way to do this in ASDM (6.4)? I think if I saw a basic example for this I could figure out next few questions but I'll post them as well just in case.
I have another single public web server (again this won't be a global policy) where I'd like to specify blocking file types, like .php, .exe., etc... again a basic example would be great.
Lastly, and this is kind of related, but we have a single office/domain and sometimes we get spam from forged addresses appearing to be from our domain. On Checkpoint I used to use its built-in SMTP security server and could define if it received mail from *@mydomain.com to drop it because we would never receive mail externally from our own domain name. I saw something similar with ESMTP in ASDM and it looks kind of like how you set up the URL access mentioned above. Can I configure this in ASDM as well, and if so how?
TIA for your help,
Jordan/bump
-
Use regular expressions to extract .llb filename from path
I am trying to be clever (always a dangerous thing) and use a regular expression to extract the name of a library from a filepath converted to a string. Whilst I appreciate there are other ways to do this, regex would appear to be a very powerful neat way, should I be able to get it to work.
i.e if I have a string of the type, C:\applications\versions\library.llb\toplevel.vi, I want to be able to extract library.llb from the string, given that it will be of variable length, may include numbers & spaces and may be within a file hierarchy of variable depth. In other words, I want to extract the portion of the string between the last \ that ends with .llb
The best I have managed so far, is \\+.*llb which returned everything minus the drive letter and the toplevel.vi
Can anyone help me achieve this, or am i better using an alternative method (e.g filepath to array string, search for .llb)
Thanks
Matt
Solved!
Go to Solution.Hi Matt,
attached you'll find two other options.
Mike
Message Edited by MikeS81 on 04-13-2010 01:30 PM
Attachments:
Path.PNG 7 KB -
Regular expressions for matching file path
Could someone give me idea that how can i compare a fixed path, with the paths user gives using regular expressions?
My fixed path is : src\com\sample\demo\work\gui\.**
and user may give like src\com\sample\demo\work\gui\test.jsp, src\com\sample\demo\work\gui\init.jsp etc.
Any ideas are appreciated and thanks in advance....and if you insist on using regexes, you'll have to double-escape the backslashes: if ( userString.matches("src\\\\com\\\\sample\\\\demo\\\\work\\\\gui\\\\.*") ) { Whether you use regexes or not, you'll save yourself a lot of hassle by converting all backslashes to forward slashes before you do anything with the strings: userString = userString.replace('\\', '/');
if ( userString.matches("src/com/sample/demo/work/gui/.*") ) {
// or...
if ( userString.startsWith("src/com/sample/demo/work/gui/") ) { -
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 Expression for field validation
I'm fairly new to using regular expressions and using Acrobat. This is probably a simple question, but I've been unable to figure it out.
I have a text field on a PDF that I would like to be 9 characters in length. The first 2 characters can only be alphanumeric, the last 7 characters can only be numeric.
At first I was using the following, which allows all the characters to be alphanumeric:
var re = /^[A-Za-z0-9 :\\_]$/;
if (event.change.length >0) {
if (event.willCommit == false) {
if (!re.test(event.change)) {
event.rc = false
That works fine, but it's not quite what I needed. With some assistance I changed it (see below) to fit what I was looking for. However, this didn't work; it prevents anything from being entered in the field:
var re = /^[A-Za-z0-9]{2}\d{7}$/;
if (event.change.length >0) {
if (event.willCommit == false) {
if (!re.test(event.change)) {
event.rc = false
Any help would be greatly appreciated.
Thanks...Here's a function you can call form the field's custom Format script. It should be placed in a document-level JavaScript:
function custom_ks1() {
// Define non-commited regular expression
var re = /^[A-Za-z0-9]{0,2}([0-9]{0,7})?$/;
// Get all of the characters the user has entered
var value = AFMergeChange(event);
// Allow field to be cleared
if(!value) return;
if (event.willCommit) {
// Define commited regular expression
var re = /^[A-Za-z0-9]{2}[0-9]{7}$/;
if (!re.test(value)) { // If final value doesn't match, alert user
app.alert("Your error message goes here.");
// event.rc = false
} else { // not commited
// Only allow characters that match the regular expression
event.rc = re.test(value);
Call it like this:
// Custom Keystroke script
custom1_ks(); -
[SOLVED]ZSH and regular expressions
Hi
I am getting into regular expressions and i have noticed that with my .zshrc file i have some problem. In bash this expression works:
\^\[^#]
but not also in zsh. I have also noted that regular expression works fine with other zshrc configurations found in archwiki (like grml) but i want to have my configuration. And i really can't find what command make a difference
My .zshrc file is pulled from this site https://github.com/slashbeast/things/bl … s/DOTzshrc.
# .zshrc
# Author: Piotr Karbowski <[email protected]>
# License: beerware.
# Basic zsh config.
umask 077
ZDOTDIR=${ZDOTDIR:-${HOME}}
ZSHDDIR="${HOME}/.config/zsh.d"
HISTFILE="${ZDOTDIR}/.zsh_history"
HISTSIZE='10000'
SAVEHIST="${HISTSIZE}"
export EDITOR="/usr/bin/vim"
export TMP="$HOME/tmp"
export TEMP="$TMP"
export TMPDIR="$TMP"
export TMPPREFIX="${TMPDIR}/zsh"
if [ ! -d "${TMP}" ]; then mkdir "${TMP}"; fi
if ! [[ "${PATH}" =~ "^${HOME}/bin" ]]; then
export PATH="${HOME}/bin:${PATH}"
fi
# Not all servers have terminfo for rxvt-256color. :<
if [ "${TERM}" = 'rxvt-256color' ] && ! [ -f '/usr/share/terminfo/r/rxvt-256color' ] && ! [ -f '/lib/terminfo/r/rxvt-256color' ] && ! [ -f "${HOME}/.terminfo/r/rxvt-256color" ]; then
export TERM='rxvt-unicode'
fi
# Colors.
red='\e[0;31m'
RED='\e[1;31m'
green='\e[0;32m'
GREEN='\e[1;32m'
yellow='\e[0;33m'
YELLOW='\e[1;33m'
blue='\e[0;34m'
BLUE='\e[1;34m'
purple='\e[0;35m'
PURPLE='\e[1;35m'
cyan='\e[0;36m'
CYAN='\e[1;36m'
NC='\e[0m'
# Functions
if [ -f '/etc/profile.d/prll.sh' ]; then
. "/etc/profile.d/prll.sh"
fi
run_under_tmux() {
# Run $1 under session or attach if such session already exist.
# $2 is optional path, if no specified, will use $1 from $PATH.
# If you need to pass extra variables, use $2 for it as in example below..
# Example usage:
# torrent() { run_under_tmux 'rtorrent' '/usr/local/rtorrent-git/bin/rtorrent'; }
# mutt() { run_under_tmux 'mutt'; }
# irc() { run_under_tmux 'irssi' "TERM='screen' command irssi"; }
# There is a bug in linux's libevent...
# export EVENT_NOEPOLL=1
command -v tmux >/dev/null 2>&1 || return 1
if [ -z "$1" ]; then return 1; fi
local name="$1"
if [ -n "$2" ]; then
local file_path="$2"
else
local file_path="command ${name}"
fi
if tmux has-session -t "${name}" 2>/dev/null; then
tmux attach -d -t "${name}"
else
tmux new-session -s "${name}" "${file_path}" \; set-option status \; set set-titles-string "${name} (tmux@${HOST})"
fi
t() { run_under_tmux rtorrent; }
irc() { run_under_tmux irssi "TERM='screen' command irssi"; }
over_ssh() {
if [ -n "${SSH_CLIENT}" ]; then
return 0
else
return 1
fi
reload () {
exec "${SHELL}" "$@"
confirm() {
local answer
echo -ne "zsh: sure you want to run '${YELLOW}$@${NC}' [yN]? "
read -q answer
echo
if [[ "${answer}" =~ ^[Yy]$ ]]; then
command "${=1}" "${=@:2}"
else
return 1
fi
confirm_wrapper() {
if [ "$1" = '--root' ]; then
local as_root='true'
shift
fi
local runcommand="$1"; shift
if [ "${as_root}" = 'true' ] && [ "${USER}" != 'root' ]; then
runcommand="sudo ${runcommand}"
fi
confirm "${runcommand}" "$@"
poweroff() { confirm_wrapper --root $0 "$@"; }
reboot() { confirm_wrapper --root $0 "$@"; }
hibernate() { confirm_wrapper --root $0 "$@"; }
detox() {
if [ "$#" -ge 1 ]; then
confirm detox "$@"
else
command detox "$@"
fi
has() {
local string="${1}"
shift
local element=''
for element in "$@"; do
if [ "${string}" = "${element}" ]; then
return 0
fi
done
return 1
begin_with() {
local string="${1}"
shift
local element=''
for element in "$@"; do
if [[ "${string}" =~ "^${element}" ]]; then
return 0
fi
done
return 1
termtitle() {
case "$TERM" in
rxvt*|xterm|nxterm|gnome|screen|screen-*)
local prompt_host="${(%):-%m}"
local prompt_user="${(%):-%n}"
local prompt_char="${(%):-%~}"
case "$1" in
precmd)
printf '\e]0;%s@%s: %s\a' "${prompt_user}" "${prompt_host}" "${prompt_char}"
preexec)
printf '\e]0;%s [%s@%s: %s]\a' "$2" "${prompt_user}" "${prompt_host}" "${prompt_char}"
esac
esac
git_check_if_worktree() {
# This function intend to be only executed in chpwd().
# Check if the current path is in git repo.
# We would want stop this function, on some big git repos it can take some time to cd into.
if [ -n "${skip_zsh_git}" ]; then
git_pwd_is_worktree='false'
return 1
fi
# The : separated list of paths where we will run check for git repo.
# If not set, then we will do it only for /root and /home.
if [ "${UID}" = '0' ]; then
# running 'git' in repo changes owner of git's index files to root, skip prompt git magic if CWD=/home/*
git_check_if_workdir_path="${git_check_if_workdir_path:-/root:/etc}"
else
git_check_if_workdir_path="${git_check_if_workdir_path:-/home}"
git_check_if_workdir_path_exclude="${git_check_if_workdir_path_exclude:-${HOME}/_sshfs}"
fi
if begin_with "${PWD}" ${=git_check_if_workdir_path//:/ }; then
if ! begin_with "${PWD}" ${=git_check_if_workdir_path_exclude//:/ }; then
local git_pwd_is_worktree_match='true'
else
local git_pwd_is_worktree_match='false'
fi
fi
if ! [ "${git_pwd_is_worktree_match}" = 'true' ]; then
git_pwd_is_worktree='false'
return 1
fi
# todo: Prevent checking for /.git or /home/.git, if PWD=/home or PWD=/ maybe...
# damn annoying RBAC messages about Access denied there.
if [ -d '.git' ] || [ "$(git rev-parse --is-inside-work-tree 2> /dev/null)" = 'true' ]; then
git_pwd_is_worktree='true'
git_worktree_is_bare="$(git config core.bare)"
else
unset git_branch git_worktree_is_bare
git_pwd_is_worktree='false'
fi
git_branch() {
git_branch="$(git symbolic-ref HEAD 2>/dev/null)"
git_branch="${git_branch##*/}"
git_branch="${git_branch:-no branch}"
git_dirty() {
if [ "${git_worktree_is_bare}" = 'false' ] && [ -n "$(git status --untracked-files='no' --porcelain)" ]; then
git_dirty='%F{green}*'
else
unset git_dirty
fi
precmd() {
# Set terminal title.
termtitle precmd
if [ "${git_pwd_is_worktree}" = 'true' ]; then
git_branch
git_dirty
git_prompt=" %F{blue}[%F{253}${git_branch}${git_dirty}%F{blue}]"
else
unset git_prompt
fi
preexec() {
# Set terminal title along with current executed command pass as second argument
termtitle preexec "${(V)1}"
chpwd() {
git_check_if_worktree
man() {
if command -v vimmanpager >/dev/null 2>&1; then
PAGER="vimmanpager" command man "$@"
else
command man "$@"
fi
# Are we running under grsecurity's RBAC?
rbac_auth() {
local auth_to_role='admin'
if [ "${USER}" = 'root' ]; then
if ! grep -qE '^RBAC:' "/proc/self/status" && command -v gradm > /dev/null 2>&1; then
echo -e "\n${BLUE}*${NC} ${GREEN}RBAC${NC} Authorize to '${auth_to_role}' RBAC role."
gradm -a "${auth_to_role}"
fi
fi
#rbac_auth
# Check if we started zsh in git worktree, useful with tmux when your new zsh may spawn in source dir.
git_check_if_worktree
if [ "${git_pwd_is_worktree}" = 'true' ]; then
git_branch
git_dirty
git_prompt=" %F{blue}[%F{253}${git_branch}${git_dirty}%F{blue}]"
else
unset git_prompt
fi
# Le features!
# extended globbing, awesome!
setopt extendedGlob
# zmv - a command for renaming files by means of shell patterns.
autoload -U zmv
# zargs, as an alternative to find -exec and xargs.
autoload -U zargs
# Turn on command substitution in the prompt (and parameter expansion and arithmetic expansion).
setopt promptsubst
# Control-x-e to open current line in $EDITOR, awesome when writting functions or editing multiline commands.
autoload -U edit-command-line
zle -N edit-command-line
bindkey '^x^e' edit-command-line
# Include user-specified configs.
if [ ! -d "${ZSHDDIR}" ]; then
mkdir -p "${ZSHDDIR}" && echo "# Put your user-specified config here." > "${ZSHDDIR}/example.zsh"
fi
for zshd in $(ls -A ${HOME}/.config/zsh.d/^*.(z)sh$); do
. "${zshd}"
done
# Completion.
autoload -Uz compinit
compinit
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
zstyle ':completion:*' completer _expand _complete _ignored _approximate
zstyle ':completion:*' menu select=2
zstyle ':completion:*' select-prompt '%SScrolling active: current selection at %p%s'
zstyle ':completion::complete:*' use-cache 1
zstyle ':completion:*:descriptions' format '%U%F{cyan}%d%f%u'
# If running as root and nice >0, renice to 0.
if [ "$USER" = 'root' ] && [ "$(cut -d ' ' -f 19 /proc/$$/stat)" -gt 0 ]; then
renice -n 0 -p "$$" && echo "# Adjusted nice level for current shell to 0."
fi
# Fancy prompt.
if over_ssh && [ -z "${TMUX}" ]; then
prompt_is_ssh='%F{blue}[%F{red}SSH%F{blue}] '
elif over_ssh; then
prompt_is_ssh='%F{blue}[%F{253}SSH%F{blue}] '
else
unset prompt_is_ssh
fi
case $USER in
root)
PROMPT='%B%F{cyan}%m%k %(?..%F{blue}[%F{253}%?%F{blue}] )${prompt_is_ssh}%B%F{blue}%1~${git_prompt}%F{blue} %# %b%f%k'
PROMPT='%B%F{blue}%n@%m%k %(?..%F{blue}[%F{253}%?%F{blue}] )${prompt_is_ssh}%B%F{cyan}%1~${git_prompt}%F{cyan} %# %b%f%k'
esac
# Ignore lines prefixed with '#'.
setopt interactivecomments
# Ignore duplicate in history.
setopt hist_ignore_dups
# Prevent record in history entry if preceding them with at least one space
setopt hist_ignore_space
# Nobody need flow control anymore. Troublesome feature.
#stty -ixon
setopt noflowcontrol
# Fix for tmux on linux.
case "$(uname -o)" in
'GNU/Linux')
export EVENT_NOEPOLL=1
esac
# Aliases
alias cp='cp -iv'
alias rcp='rsync -v --progress'
alias rmv='rsync -v --progress --remove-source-files'
alias mv='mv -iv'
alias rm='rm -iv'
alias rmdir='rmdir -v'
alias ln='ln -v'
alias chmod="chmod -c"
alias chown="chown -c"
if command -v colordiff > /dev/null 2>&1; then
alias diff="colordiff -Nuar"
else
alias diff="diff -Nuar"
fi
alias grep='grep --colour=auto'
alias egrep='egrep --colour=auto'
alias ls='ls --color=auto --human-readable --group-directories-first --classify'
# Keys.
case $TERM in
rxvt*|xterm*)
bindkey "^[[7~" beginning-of-line #Home key
bindkey "^[[8~" end-of-line #End key
bindkey "^[[3~" delete-char #Del key
bindkey "^[[A" history-beginning-search-backward #Up Arrow
bindkey "^[[B" history-beginning-search-forward #Down Arrow
bindkey "^[Oc" forward-word # control + right arrow
bindkey "^[Od" backward-word # control + left arrow
bindkey "^H" backward-kill-word # control + backspace
bindkey "^[[3^" kill-word # control + delete
linux)
bindkey "^[[1~" beginning-of-line #Home key
bindkey "^[[4~" end-of-line #End key
bindkey "^[[3~" delete-char #Del key
bindkey "^[[A" history-beginning-search-backward
bindkey "^[[B" history-beginning-search-forward
screen|screen-*)
bindkey "^[[1~" beginning-of-line #Home key
bindkey "^[[4~" end-of-line #End key
bindkey "^[[3~" delete-char #Del key
bindkey "^[[A" history-beginning-search-backward #Up Arrow
bindkey "^[[B" history-beginning-search-forward #Down Arrow
bindkey "^[Oc" forward-word # control + right arrow
bindkey "^[Od" backward-word # control + left arrow
bindkey "^H" backward-kill-word # control + backspace
bindkey "^[[3^" kill-word # control + delete
esac
bindkey "^R" history-incremental-pattern-search-backward
bindkey "^S" history-incremental-pattern-search-forward
if [ -f ~/.alert ]; then cat ~/.alert; fi
Thanks for all the help.
Last edited by Shark (2013-05-11 22:32:24)Raynman wrote:
"This expression doesn't work", "It doesn't work" ...
Could you try being a bit more specific?
Firstly, i am sorry i didn't post the output. I should have know better.
Secondly, chill out.
I have used above regex with grep command. Output from terminal is:
zsh: bad pattern: ^[^#]
In bash it works perfectly.
If i issue "setopt re_match_pcre" i have the same ouput as above.
EDIT: If i issue "unsetopt no_match" it actually works but i have to change the regex from "\^\[^#]" to "\^[^#]" otherwise i get the same output as above. In bash both options work.
Last edited by Shark (2013-05-11 22:07:21) -
Help!!!!! Regular Expressions!!
I am trying to use Regular Expressions, for parsing. For that the pakage required is
java.util.regex.*;
I am also using the import statement in a sample code. But compiling it, gives an error,
ERRORS:
Replacement.java:6: package java.util.regex does not exist
import java.util.regex.*;
^
I have also set the path to C:\jdk1.4\bin
I have also set the classpath to C:\jdk1.4\lib
I don't know, Why it doesn't recognise the java.util.regex package
please help!!
gaurav_k1Have you checked if the regex package is part of the
JDK1.4? I can't find it. What classes does it
implement?Yeah, since 1.4
http://java.sun.com/j2se/1.4/docs/api/java/util/regex/package-summary.html
I'm not sure what the original problem could be, possibly using a previously installed jre? If you had one previously installed, check the classpaths and uninstall any old jre (some forget that thinking they only need to remove the jdk). Could you give us anymore hints? -
Java – Regular Expressions – Finding any non digit byte in a multiple byte
Hello,
I’m new to JAVA and Regular Expressions; I’m trying to write a regular expression that will find any records that contain a non digit byte in a multiple byte field.
I thought the following was the correct expression but it is only finding records that contain “all” non digit bytes.
\D{1,}
\D = Non Digit
{1,} = at least 1 or more
Below is my sample data. I would like the regular expression to find all of the records that are not all numeric. However when I use the regular expression \D{1,} it is only finding the 2 records that all bytes are non digits. (i.e. “ “ and “A “)
“ 111229”
“2 111229”
“20091229”
“200912c9”
“201#1229”
“20101229”
“20110229”
“20111*29”
“20111029”
“20111229”
“20B11229”
“A “
“A0111229”
Please note I have also tried \D{1,}+ and \D{1,}? And they also do not return my desired results
Any assistance someone can provide would be greatly appreciated.You don't show the code you are using but I surmise you are using String.matches() which requires that the whole target must match the regular expression not just part of it. Instead you should create a Pattern and then a Matcher and use the Matcher.find() method. Check the Javadoc for Pattern and Matcher and look at the Java regex tutorial - http://docs.oracle.com/javase/tutorial/essential/regex/ .
P.S. You can re-use the Pattern object - you don't have to create it every time you need one.
P.P.S. Java regular expressions work with characters not bytes and characters are not not not bytes. -
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");
} -
Regular expressions and capture groups
Hi everyone :)
Is there a way to override the default behaviour of capture groups in regular expressions? More specifically I want to override this:
"The captured input associated with a group is always the subsequence that the group most recently matched."
For example, if I have a string that is this:
* <comment one>
* <comment two>
<some text>
I have a pattern of the form "(.*)(/\\*.*\\*/)(.*)" which will match multi-line comments. I have also specified the flag DOTALL so that the predefined character class '.' matches over line-breaks.
If I apply this pattern to the above string I get comment two being captured, not comment one. This is because of the stipulation that I cited above.
I need to be able to capture only the first match, and prevent the capture group from being overwritten by more recent matches.
Is this possible? Any ideas?
Thanks in advance.
Kind regards,
Ben DeanyIs there a way to override the default behaviour of
capture groups in regular expressions? More
specifically I want to override this:No, but you don't need to.
I have a pattern of the form "(.*)(/\\*.*\\*/)(.*)"
which will match multi-line comments.Comment two is captured by the second group because comment one is eaten by the first group. Use the reluctant quantifier "*?" on the . in the first group instead of the greedy quantifier "*" to get what is apparently the behavior you want. Then the first group will contain nothing, the second group will contain comments one and two, and the third group will contain the following text.
.* is a very powerful thing to use. It will match everything in its path, guzzling text like moonshine at Mardi Gras. The only reason it doesn't match comment two as well is because then the expression as a whole would not match.
The parentheses surrounding the first and third groups are not needed (unless you want to use group methods on them too). -
Regular expression in B2B Document editor
Hi All,
i intent to parse a file coming into B2B with record entry starting as ' 88'. And i want to use this value 88 to differentiate it from other records. I have set a rule (^[ \t]+88) on the field to pick this entry and set the value of the tag field as 88.
but it is not getting picked up properly and is jumping over this record itself completely. could you please suggest how this regular expression rules work when used with tag.. i have to use only the rule but still the record is not getting properly picked up...
kindly share any assistance in this regards
thanks
RakeshHi Datla,
Yes, there is a de-identification support in Data Editor of B2B Document Editor. Once you open a EDI or HL7 doc with data editor, it will ask you to "Choose De-Identification and specify rule file". You may create a separate file for your use. Data Replacement Rule file is actually a XML which holds the separator information along with the data to be replaced. You may define your own DRR file.
To know more, just open the Data Editor from Document Editor, go to Help --> Content -->Data Replace and De-Identify section.
Regards,
Anuj -
Regular expression in url-pattern in web.xml
hi,
could any tell me the is web.xml accepts regexp(except wild card) in it's url-pattern attribute. I want to put regular expression (except wildcard, i know it supports) as [a-zA-Z]+ like in url-pattern in servlet-mapping. I tried this :
<servlet-mapping>
<servlet-name>AppDnldMain</servlet-name>
<url-pattern>/[a-zA-Z]+/?</url-pattern>
</servlet-mapping>
But it dint work.. I dont know whether i processed in right way. Any suggestion are most welcome..No it does not accept wild card.
Servlet specification section SRV.11.2
In theWeb application deployment descriptor, the following syntax is used to define
mappings:
A string beginning with a / character and ending with a /* suffix is used
for path mapping.
A string beginning with a *. prefix is used as an extension mapping.
A string containing only the / character indicates the "default" servlet of
the application. In this case the servlet path is the request URI minus the context
path and the path info is null.
All other strings are used for exact matches only.
If you want regex matching, you can match all urls to a single servlet, and then use request.getRequestURI and do regex on that in your code.
Cheers,
evnafets -
Regular expressions with dates and multiple matches
I am currently attempting to automate modifying start and end dates within a .config file via powershell but I am having issues identifying the regular expression for the end date section since both are on the same line in the file. Below is the string that
I want to change.
Sometimes the dates are blank and sometimes the dates are filled in.
Dates are always in the same format (yyyy-MM-dd hh:mm).
I also want to note that there are multiple instances of 'StartDate="" EndDate=""' for other applications throughout the same config file so I cannot limit the expression to not include the App name.
I do not want to limit the search to a line number since there are instances where admins will add an extra space in the config file that may throw off the line number.
I want to replace the dates or lack there of in their respective spots on the line below via powershell:
<App name="TestApp" StartDate="2012-03-22 13:30" EndDate="">
I am successfully able to use
$startRegex = '(?<=<App name="TestApp" StartDate=")([^"]*)'
to replace the StartDate but I can't seem to single out the EndDate with regular expression. What expression can I use to have it ignore what is in the quotations after StartDate and only pay attention to the EndDate value?
Below is a snippet:
$path = d:\inetpub\website\app.config
$startRegex = '(?<=<App name="TestApp" StartDate=")([^"]*)'
$starttime = (get-date).ToString("yyyy-MM-dd hh:mm")
(gc $path) -replace $startregex, $starttime | set-content $path
I want to accomplish the same for EndDate.
Thanks in advance!If you do this with XML it will be painless and less prone to error.
$n=$xml.SelectSingleNode('//App[@name="TestApp"]')
$n.StartDate=$newstartdate
$n.EndDate=$newenddate
$xml.Save($filename)
\_(ツ)_/
Maybe you are looking for
-
after a factory reset, the apps store is no longer on my ipod touch. how do I restore it?
-
Photo icon has disappeared - how do I get it back?
I have just accidentally deleted the standard photos icon and have no idea how to get it back. Any advice please?
-
i have a mac mini i bought in december 2008..... when i run disk permissions, i get a bunch of data, such as: Permissions differ on System/Library/PrivateFrameworks/iphotoAccess.frame /ilifemediabrowser /coreservices/RawCamera.bundle /mobiledevice Ra
-
hi there, need your help.i run #volcheck when i'd like to detect the mounted floppy disk.what about usb thumbdrive? wud like to mount it and access it but i cant see is when i run df -k. please help how i can mount my thumbdrive and the files on it.
-
Mountain Lion, Perl and DBD::mysql
so far it seems to be impossible to add the DBD::mysql extension for Perl under Mountain Lion 10.8.2. Is that right?