Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 只否定正则表达式的一部分(制表和一个单词)?_Java_Regex - Fatal编程技术网

Java 只否定正则表达式的一部分(制表和一个单词)?

Java 只否定正则表达式的一部分(制表和一个单词)?,java,regex,Java,Regex,我有以下意见: 192.168.1.5:5555 device 192.168.1.9:5555 offline 192.168.1.12:5555 device 192.168.1.13:5555 offline 这是我用来匹配IP地址和端口号的正则表达式: ([01]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])\.([01]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])\.([01]?[0-9]{1,2}|2[0-4][0-9]|2

我有以下意见:

192.168.1.5:5555    device
192.168.1.9:5555    offline
192.168.1.12:5555   device
192.168.1.13:5555   offline
这是我用来匹配IP地址和端口号的正则表达式:

([01]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])\.([01]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])\.([01]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])\.([01]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])\:\d{0,5}
只有当有而不是制表,然后是单词“offline”时,才是正确的匹配。因此,我编写了以下正则表达式,并将其添加到上一个正则表达式的末尾:

(?!\t*offline)
但遗憾的是,我没有得到期望的输出,这应该是:

192.168.1.5:5555    device
192.168.1.12:5555   device
你可以用

(?<!\d)(?:[01]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])(?:\.(?:[01]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){3}(?::\d{1,5})?+(?!\d|\t*offline)
(?
见

正则表达式详细信息

  • (?-左侧数字边界(不允许紧靠左侧的数字)
  • (?:[01]?[0-9]{1,2}2[0-4][0-9]{25[0-5])(?:\。(?:[01]?[0-9]{1,2}2[0-4][0-9]{25[0-5]){3}
    -IP模式(4个点分隔的八位组)
  • (?::\d{1,5})+
    -1或0次出现(可选出现)的
    ,然后是1到5位数字(注意所有格
    ?+
    量词不允许回溯到模式)
  • (?!\d |\t*offline)
    -当前位置右侧不允许紧跟着
    offline
    字符串的数字或0+制表符

@WiktorStribiżew在IP+端口模式周围放置
\b
很遗憾没有起作用。是的,这起作用了,谢谢!您基本上添加了boudaries,在正则表达式的最后一部分添加了一个数字的否定,对吗?@Janeliep我确保在(
(?)之前和之后(
(?!\d)
)模式,并且只有在使用停止回溯到模式的所有格量词检查可选端口模式后,才能执行一次负前瞻检查。为什么有必要禁止回溯到模式?@janelep在匹配可选模式后触发一次前瞻检查。